K8S 工作负载(一)

K8S 工作负载(1)

Pod

k8s-pod
Pod 是 Kubernetes 中创建,管理和调度的最小计算单元。用户可以在 K8S 中通过调用 Pod API生成一个 Pod,让 K8S 对其进行调度。
Pod 是一组(一个或多个)容器,这些容器共享存储、网络、以及运行这些容器的声明。

Pause 容器: 每个Pod都有一个特殊的被称为“根容器”的Pause容器。Pause容器对应的镜像属于Kubernetes平台的一部分。

API server 创建 Pod 的流程图
pod-create

  • 客户端请求apiserver创建replicasets,apiserver通过认证、鉴权、准入后,会把请求相关信息持久化至etcd
  • Controller-manager 管理的replicaset controller 通过list-watch机制,watch到有replicasets创建请求,通过label selector发现集群中与这个replicasets 关联的pod当前状态与期望状态不一致,则会进行调协(reconcile)向apiserver发起创建pod请求
  • Scheduler 通过list-watch机制来发现未绑定的pod,并通过预选及优选策略算法,来计算出pod最终可调度的node节点,并通过apiserver将数据更新至etcd
  • Kubelet 通过list-watch发现有新的pod bound到本node上,则会发起创建pod相关流程

Deployments

Pod是K8S创建或部署的最小单位,但是Pod是被设计为相对短暂的一次性实体,Pod可以被驱逐(当节点资源不足时)以及随着集群的节点崩溃而消失。K8S提供了Controller(控制器)来管理Pod,Controller可以创建和管理多个Pod,提供副本管理、滚动升级和自愈能力,其中最为常用的就是Deployment。
deploy-pods
一个Deployment可以包含一个或多个Pod副本,每个Pod副本的角色相同,所以集群会自动为Deployment的多个Pod副本分发请求。

Deployment集成了上线部署、滚动升级、创建副本、恢复上线的功能,在某种程度上,Deployment实现无人值守的上线,大大降低了上线过程的复杂性和操作风险。

创建 deployment

apiVersion: apps/v1      # 注意这里与Pod的区别,Deployment是apps/v1而不是v1
kind: Deployment         # 资源类型为Deployment
metadata:
  name: nginx            # Deployment的名称
  namespace: default     # Deployment所处的命令空间
spec:
  replicas: 2            # Pod的数量,Deployment会确保一直有2个Pod运行         
  selector:              # Label Selector
    matchLabels:
      app: nginx
  template:              # Pod的定义,用于创建Pod,也称为Pod template
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:latest  # 镜像
        name: nginx          # 镜像运行时的名称
        resources:           # 镜像运行时配置的资源
          limits:
            cpu: 100m
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 200Mi
      imagePullSecrets:
      - name: default-secret

将上述文件保存为nginx.yaml,并执行'kubectl apply -f nginx.yaml'
READY 前面表示当前运行的 pod 数目,后面表示期望运行的 pod 数目。AVAILABLE 为2表示有2个Pod是可用的。

[root@cosmosmay ~]# kubectl get deployments.apps
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
nginx     2/2     2            2           1m

更新 deployment

仅当 Deployment Pod 模板(即 .spec.template)发生改变时,例如模板的标签或容器镜像被更新, 才会触发 Deployment 上线。其他更新(如对 Deployment 执行扩缩容的操作)不会触发上线动作
要更新 Deployment 的副本数量,只需修改 replicas 字段即可。

例如,我们将副本数量从2增加到3:
执行kubectl edit deployment nginx

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:latest
        name: nginx
        ...

要更新 Deployment 的标签,需要先删除旧的标签,然后添加新的标签。

例如,我们将原有的 app: nginx 标签替换为 app: new-nginx
执行 kubectl edit deployment nginx

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: default
  labels:
    app: new-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: new-nginx
  template:
    metadata:
      labels:
        app: new-nginx
    spec:
      containers:
      - image: nginx:latest
        name: nginx
        ...

要更新 Deployment 的镜像

kubectl set image deployment/nginx nginx=nginx:1.16.1

回滚 deployment

首先查看当前 deployment 的历史版本:

kubectl rollout history deployment/nginx

恢复到指定版本:

# --to-revision 指定恢复版本
kubectl rollout undo deployment/nginx --to-revision=1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值