k8s资源清单创建pod、deployment、service


k8s 中所有的内容都抽象为资源,资源实例化之后,叫做对象。

1. k8s核心资源分类

1.1 工作负载型资源(workload)

  • pod:是k8s中最小的单元
  • ReplicaSet:调度器,通过标签控制 pod 的副本数目
  • Deployment:控制器,管理无状态的应用
  • StatefulSet:管理有状态的应用
  • DaemonSet:可以在每个节点运行 pod 主键
  • Job:批处理
  • CronJob:批处理

1.2 服务发现及负载均衡型资源(Service Discovery LoadBalance)

  • service
  • Ingress

1.3 配置与存储型资源

  • Volume(存储卷)
    • 云端存储
    • 亚马逊弹性块存储
    • SAN
    • NFS
    • GiusterFS(分布式存储)
  • 容器存储接口CSI
  • ConfigMap(配置中心)
  • Secret(保存敏感信息)
  • DownwardAPI(将外部环境的信息输出给容器)

1.4 集群级资源

  • Namespace:名称空间
  • Node:节点
  • Role
  • ClusterRole
  • RoleBinding
  • ClusterRoleBinding

1.5 元数据型资源

  • HPA:水平扩展的资源
  • PodTemplate(pod模板):用于让控制器创建pod是使用的模板
  • LimitRange(资源限制)

2. 创建资源的方式

  • 使用命令进行创建
  • 使用命令式资源清单创建
    - apiserver 仅接收json格式的资源定义
    - 使用yaml格式提供配置清单,apiserver 可自动将其转为 json 格式并执行
  • 使用声明式资源清单创建
    - 可以确保资源尽可能向声明的状态靠近,并且可以随时改变声明、随时应用新的声明

3. 资源清单的组成

  • apiVersion:apiversion版本
    - alpha(内测版)
    - beta(公测版)
    - stable(稳定版):例如v1
  • kind:资源类型
  • metadata:资源元数据
    - name:同一类别下唯一
    - namespace:名称空间
    - labels:标签
    - annotations:定义污点,
  • spec:期望的状态
  • status:当前的状态、本字段有k8s集群维护,用户不能定义和更改

4. 资源清单格式

是一个 yaml文件

apiVersion:  #指api的版本,一般是v1,定可以使用kubectl api-versions 获取版本信息
kind:       #资源类型,例如pod
metadata:  #资源元数据
   name:     
   namespace  #名称空间,不指定则默认是 default
   labels    #标签  
spec:   #详细定义对象

5. 资源清单配置实例

5.1 pod yaml

//暴露端口可以在外部访问
[root@k8s-master ~]# vim pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: myweb-123
  namespace: lxr  #指定名称空间,这是我事先通过 kubectl create ns lxr 创建的
  labels:
    app: myweb
spec:
  containers:
    - name: web1
      image: lxr909626/httpd:v0.1
      imagePullPolicy: IfNotPresent
      ports:
        - containerPort: 80
          hostPort: 8080   #这个端口必须是有效的,不能随便写
[root@k8s-master ~]# kubectl create -f pod.yaml
pod/myweb-123 created
[root@k8s-master ~]# kubectl get pods -n lxr -o wide
NAME        READY   STATUS    RESTARTS   AGE   IP            NODE                    NOMINATED NODE   READINESS GATES
myweb-123   1/1     Running   0          10s   10.244.2.16   k8s-node2.example.com   <none>           <none>

在这里插入图片描述
一个pod创建两个容器

[root@k8s-master ~]# vim pod.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: myweb-123
  namespace: lxr
  labels:
    app: myweb
spec:
  containers:
    - name: web1
      image: lxr909626/httpd:v0.1
      imagePullPolicy: IfNotPresent
    - name: web2
      image: busybox
      command: ['/bin/sh','-c','sleep 3600']

[root@k8s-master ~]# kubectl create -f pod.yaml
pod/myweb-123 created
[root@k8s-master ~]# kubectl get pods -n lxr -o wide
NAME        READY   STATUS    RESTARTS   AGE   IP            NODE                    NOMINATED NODE   READINESS GATES
myweb-123   2/2     Running   0          16s   10.244.2.22   k8s-node2.example.com   <none>           <none>

//进入容器
[root@k8s-master ~]# kubectl exec -n lxr -it myweb-123 -c web1 -- /bin/sh 
/ # 

5.2 deployment yaml

[root@k8s-master ~]# vim deploy.yaml 
apiVersion: apps/v1  #api版本
kind: Deployment  #资源类型
metadata:  #元数据定义
  name: nginx-deploy  #名称
  namespace: default   #名称空间
  labels:  #标签
    app: nginx-web
spec:   #deployment定义
  replicas: 3   #定义2个副本
  selector:    #标签选择器,匹配pod的标签
    matchLabels:
      app: nginx-web
  template:   #pod模板定义
    metadata:
      name: nginx-123
      namespace: default
      labels:  #这里的标签必须和标签选择器的一致
        app: nginx-web
    spec:   #pod内的容器定义
      containers:
        - name: web
          image: nginx
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80   #暴露IP

[root@k8s-master ~]# kubectl create -f deploy.yaml 
deployment.apps/nginx-deploy created
[root@k8s-master ~]# kubectl get pod -o wide 
NAME                            READY   STATUS    RESTARTS   AGE   IP            NODE                    NOMINATED NODE   READINESS GATES
nginx-deploy-5759d97ff4-42z4b   1/1     Running   0          10s   10.244.1.10   k8s-node1.example.com   <none>           <none>
nginx-deploy-5759d97ff4-7ghls   1/1     Running   0          10s   10.244.2.26   k8s-node2.example.com   <none>           <none>
nginx-deploy-5759d97ff4-fcsz5   1/1     Running   0          10s   10.244.2.27   k8s-node2.example.com   <none>           <none>

//暴露端口到主机
[root@k8s-master ~]# kubectl expose deployment nginx-deploy --port=80 --type=NodePort
service/nginx-deploy exposed
[root@k8s-master ~]# kubectl get svc
NAME           TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes     ClusterIP   10.96.0.1        <none>        443/TCP        3d7h
nginx-deploy   NodePort    10.101.226.188   <none>        80:31004/TCP   12s

访问
在这里插入图片描述

5.3 service yaml

为上面创建的 Deployment 资源定义service资源

[root@k8s-master ~]# vim svc.yaml 

apiVersion: v1
kind: Service
metadata:
    name: nginx-svc
    namespace: default
spec:
  selector:
    app: nginx-web
  type: NodePort
  ports:
    - nodePort: 30008
      port: 80
      targetPort: 80
[root@k8s-master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP        3d11h
nginx-svc    NodePort    10.97.1.221   <none>        80:30008/TCP   3m16s

[root@k8s-master ~]# kubectl get pods -o wide
NAME                            READY   STATUS    RESTARTS   AGE   IP            NODE                    NOMINATED NODE   READINESS GATES
nginx-deploy-5d9b7f8766-8ld62   1/1     Running   0          92s   10.244.2.50   k8s-node2.example.com   <none>           <none>
nginx-deploy-5d9b7f8766-jjk2v   1/1     Running   0          92s   10.244.1.38   k8s-node1.example.com   <none>           <none>
nginx-deploy-5d9b7f8766-mh8fm   1/1     Running   0          92s   10.244.1.39   k8s-node1.example.com   <none>           <none>

//查看endpoint资源端点列表
[root@k8s-master ~]# kubectl get endpoints
NAME         ENDPOINTS                                      AGE
kubernetes   192.168.249.141:6443                           3d11h
nginx-svc    10.244.1.38:80,10.244.1.39:80,10.244.2.50:80   13s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值