当前位置: > > > K8s - Kubernetes使用详解2(运行Deployment样例2:使用配置文件创建资源)

K8s - Kubernetes使用详解2(运行Deployment样例2:使用配置文件创建资源)

    我们知道 Kubernetes 支持两种创建资源的方式:命令和配置文件。在上文中我介绍了前者(点击查看),下面我接着介绍后者:通过配置文件创建资源。

二、运行 Deployment(使用配置文件)

1,基本用法

(1)首先我创建一个配置文件(nginx.yml),里面配置好所有资源的属性,内容如下:
apiVersion: apps/v1 # apiVersion 是当前配置格式的版本
kind: Deployment # kind 是要创建的资源类型,这里是 Deployment
metadata: # metadata 是该资源的元数据,name 是必需的元数据项
  name: nginx-deployment
spec: # spec 部分是该 Deployment 的规格说明
  replicas: 2 # replicas 指明副本数量,默认为 1
  selector:
    matchLabels:
      app: web_server
  template: # template 定义 Pod 的模板,这是配置文件的重要部分
    metadata: # metadata 定义 Pod 的元数据,至少要定义一个 label。label 的 key 和 value 可以任意指定。
      labels:
        app: web_server
    spec: # pec 描述 Pod 的规格,此部分定义 Pod 中每一个容器的属性,name 和 image 是必需的。
      containers:
      - name: nginx
        image: nginx:1.7.9

(2)然后通过 kubectl apply 命令进行创建即可。
注意kubectl apply 不但能够创建 Kubernetes 资源,也能对资源进行更新,非常方便。
kubectl apply -f nginx.yml

(3)部署成功后,可以通过 kubectl get 查看 nginx-deployment 的各种资源:
kubectl get deployment
kubectl get replicaset
kubectl get pod -o wide

2,伸缩(Scale)

(1)伸缩是指在线增加或减少 Pod 的副本数。比如我们修改 nginx.yml 文件内容,将副本改成 3 个。
apiVersion: apps/v1 # apiVersion 是当前配置格式的版本
kind: Deployment # kind 是要创建的资源类型,这里是 Deployment
metadata: # metadata 是该资源的元数据,name 是必需的元数据项
  name: nginx-deployment
spec: # spec 部分是该 Deployment 的规格说明
  replicas: 3 # replicas 指明副本数量,默认为 1
  selector:
    matchLabels:
      app: web_server
  template: # template 定义 Pod 的模板,这是配置文件的重要部分
    metadata: # metadata 定义 Pod 的元数据,至少要定义一个 label。label 的 key 和 value 可以任意指定。
      labels:
        app: web_server
    spec: # pec 描述 Pod 的规格,此部分定义 Pod 中每一个容器的属性,name 和 image 是必需的。
      containers:
      - name: nginx
        image: nginx:1.7.9

(2)再次执行 kubectl apply 命令,可以看到副本数变成了 3 个。
kubectl apply -f nginx.yml

3,用 label 控制 pod 的位置

默认情况下,scheduler 会将 pod 调度到所有可用的 Node,不过有些情况我们希望将 Pod 部署到指定的 Node,比如:
  • 将有大量磁盘 I/OPod 部署到配置了 SSD Node
  • 或者 Pod 需要 GPU,需要运行在配置了 GPU 的节点上。
Kubernetes 通过 label 来实现这个功能。label key-value 对,各种资源都可以设置 label,灵活添加各种自定义属性。
(1)比如下面命令(master 节点上执行)会给 node2 节点打上一个 ssd 的标签(将其标注为配置了 SSD 的节点):
kubectl label node node2 disktype=ssd

(2)然后通过如下命令可以查看节点的 label。注意:除了 disktype,可以看到 Node 还有几个 Kubernetes 自己维护的 label
kubectl get node --show-labels

(3)在 nginx.yml 文件中定义 nodeselector 为这个自定义标签,就可以指定 pod node2 中运行。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web_server
  template:
    metadata:
      labels:
        app: web_server
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
      nodeSelector:
        disktype: ssd

(4)最后我们执行 kubectl apply 命令进行部署,可以看到两个副本都是运行在 node2 上。
kubectl apply -f nginx.yml

(5)如果要删除 label 也很简单。执行如下命令则可删除 node2 disktype 标注。
注意:删除标签后 Pod 并不会重新部署,所以 pod 依旧是在 node2 上。除非删除或注释掉配置文件中的 nodeSelector 配置,然后通过 kubectl apply 重新部署。
kubectl label node node2 disktype-

附:删除 Deployment

    既然可以通过 yml 配置文件来运行 Deployment,当然也可以使用它来来删除对应的 Deployment。下面是一个简单的样例:
kubectl delete -f nginx.yml
评论0