ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Kubernetes编写yaml文件示例

2021-08-21 18:04:40  阅读:173  来源: 互联网

标签:kubectl name Kubernetes nginx 示例 yaml deployment


创建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

标签:kubectl,name,Kubernetes,nginx,示例,yaml,deployment
来源: https://www.cnblogs.com/ltaodream/p/15170154.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有