阅读 134

Kubernetes编写yaml文件示例

创建nginx-deployment.yaml,意思为创建2个pod,每个pod里的nginx版本为1.7.9,容器监听端口(containerPort)是 80

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

一个 YAML 文件,对应到 Kubernetes 中,就是一个 API Object(API 对象)。当为这个对象的各个字段填好值并提交给 Kubernetes 之后,Kubernetes 就会负责创建出这些对象所定义的容器或者其他类型的 API 资源。

Pod 就是 Kubernetes 世界里的“应用”;而一个应用,可以由多个容器组成。

Deployment,是一个定义多副本应用(即多个副本 Pod)的对象,还负责在 Pod 定义发生变化时,对每个副本进行滚动更新。

Deployment 扮演的是 Pod 的控制器的角色。

Labels 是一组 key-value 格式的标签。可以通过这个 Labels 字段从 Kubernetes 中过滤出它所关心的被控制对象。

使用命令创建,推荐使用apply

kubectl apply -f nginx-deployment.yaml
或者
kubectl create -f nginx-deployment.yaml

检查

[root@k8s-master01 yaml]# kubectl get pods -l app=nginx
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-5d59d67564-9cf75   1/1     Running   0          76s
nginx-deployment-5d59d67564-ldjjm   1/1     Running   0          76s

查看一个API对象的细节

kubectl describe pod nginx-deployment-5d59d67564-9cf75

在 Kubernetes 执行的过程中,对 API 对象的所有重要操作,都会被记录在这个对象的 Events 里,并且显示在 kubectl describe 指令返回的结果中。

如果要变nginx版本,比如要对这个 Nginx 服务进行升级,把它的镜像版本从 1.7.9 升级为 1.8

修改yaml文件

...    
    spec:
      containers:
      - name: nginx
        image: nginx:1.8 # 这里被从 1.7.9 修改为 1.8
        ports:
      - containerPort: 80

使用命令生效,推荐使用apply

kubectl apply -f nginx-deployment.yaml
或者
kubectl replace -f nginx-deployment.yaml

接下来,在这个 Deployment 中尝试声明一个 Volume。

将nginx-deployment.yaml文件修改如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.8
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: nginx-vol
      volumes:
      - name: nginx-vol
        emptyDir: {}

emptyDir:不显式声明宿主机目录的 Volume。Kubernetes 会在宿主机上创建一个临时目录,这个目录将来就会被绑定挂载到容器所声明的 Volume 目录上。

Pod 中的容器,使用的是 volumeMounts 字段来声明自己要挂载哪个 Volume,并通过 mountPath 字段来定义容器内的 Volume 目录,比如:/usr/share/nginx/html。

显式声明 Volume

 ...   
    volumes:
      - name: nginx-vol
        hostPath: 
          path: /var/data

执行命令更新pod

kubectl apply -f nginx-deployment.yaml
kubectl get pods

使用 kubectl describe 查看一下最新的 Pod,会发现 Volume 的信息已经出现在了 Container 描述部分

可以使用 kubectl exec 指令,进入到这个 Pod 当中(即容器的 Namespace 中)查看这个 Volume 目录:

$ kubectl exec -it nginx-deployment-5c678cfb6d-lg9lw -- /bin/bash
# ls /usr/share/nginx/html

删除Nginx Deployment,运行以下命令:

kubectl delete -f nginx-deployment.yaml

原文:https://www.cnblogs.com/ltaodream/p/15170154.html

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐