Kubernetes(4)deployment管理pod

Kubernetes(4)deployment管理pod

kubernetes cluster由master和node组成

master节点是kubernetes cluster的大脑,它同时也是一个node
1.API Server(k8s.gcr.io/kube-apiserver):是kubernetes cluster的前端接口,各种客户端工具以及kubernetes其他组件可以通过它管理cluster的各种资源
2.k8s.gcr.io/kube-scheduler:负责决定将pod放在哪个node上运行
3.k8s.gcr.io/kube-controller-manager:负责管理cluster各种资源,保证资源处于预期状态
4.k8s.gcr.io/etcd:负责保存集群的配置信息和各种资源的状态信息,当数据发生变化的时候,etcd会快速通知kubernetes相关组件
5.pod网络:pod要能够相互通信,kubernetes cluster必须部署pod网络,flannel是其中一个可选的方案

node节点
1.kubelet
2.kube-proxy
3.pod网络

几乎所有的kubernetes组建本身也运行在pod里面
[k8s@server1 ~]$ kubectl get pod --all-namespaces -o wide
我们将通过实践深入学习kubernetes的各种特性,
作为容器编排引擎,最重要也是最基本的功能当然是运行容器化应用

kubernetes通过各种controller来管理pod的生命周期,
为了满足不同的业务场景,kubernetes开发了多种,
我们首先学习最常用的deployment

deployment管理pod

1.1运行deployment
# 部署两个副本的 nginx-deployment 容器的image为nginx:1.7.9
[k8s@server1 ~]$ kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/nginx-deployment created
# 通过kubectl get deployment命令查看nginx-deployment的状态,显示输出的两个副本正常运行
[k8s@server1 ~]$ kubectl get deployment nginx-deployment 
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   2/2     2            2           2m31s

# 获取更详细的信息
[k8s@server1 ~]$ kubectl describe deployment nginx-deployment
...
# 重点看这里
# 这里告诉我们创建了一个 replicaset(容器副本) nginx-deployment-748ff87d9d
# Events是 deployment的日志,记录了replicaset的启动过程

Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  3m24s  deployment-controller  Scaled up replica set nginx-deployment-748ff87d9d to 2

...
[k8s@server1 ~]$ kubectl get replicaset
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-748ff87d9d   2         2         2       16m

[k8s@server1 ~]$ kubectl describe replicaset nginx-deployment-748ff87d9d
Name:           nginx-deployment-748ff87d9d
Namespace:      default
Selector:       pod-template-hash=748ff87d9d,run=nginx-deployment
Labels:         pod-template-hash=748ff87d9d
                run=nginx-deployment
Annotations:    deployment.kubernetes.io/desired-replicas: 2
                deployment.kubernetes.io/max-replicas: 3
                deployment.kubernetes.io/revision: 1
# 指明replicaset是由Deployment/nginx-deployment创建的
Controlled By:  Deployment/nginx-deployment
Replicas:       2 current / 2 desired
Pods Status:    2 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  pod-template-hash=748ff87d9d
           run=nginx-deployment
  Containers:                     
   nginx-deployment:
    Image:        nginx:1.7.9
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Events:
  Type    Reason            Age   From                   Message
  ----    ------            ----  ----                   -------
  Normal  SuccessfulCreate  16m   replicaset-controller  Created pod: nginx-deployment-748ff87d9d-bxc8r
  Normal  SuccessfulCreate  16m   replicaset-controller  Created pod: nginx-deployment-748ff87d9d-25k5w

# 两个副本处于running状态
[k8s@server1 ~]$ kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-748ff87d9d-25k5w   1/1     Running   0          17m
nginx-deployment-748ff87d9d-bxc8r   1/1     Running   0          17m

# 获取更详细的信息
[k8s@server1 ~]$ kubectl get pods
NAME                                READY   STATUS    RESTARTS   AGE
httpd-app-5bc589d9f7-pns4q          1/1     Running   0          31m
httpd-app-5bc589d9f7-qdq4z          1/1     Running   0          31m
nginx-deployment-748ff87d9d-25k5w   1/1     Running   0          17m
nginx-deployment-748ff87d9d-bxc8r   1/1     Running   0          17m

[k8s@server1 ~]$ kubectl describe pod nginx-deployment-748ff87d9d-25k5w
Name:           nginx-deployment-748ff87d9d-25k5w
Namespace:      default
Priority:       0
Node:           server3/172.25.0.3
Start Time:     Sat, 24 Aug 2019 14:52:14 +0800
Labels:         pod-template-hash=748ff87d9d
                run=nginx-deployment
Annotations:    <none>
Status:         Running
IP:             10.244.2.3
Controlled By:  ReplicaSet/nginx-deployment-748ff87d9d
Containers:
  nginx-deployment:
    Container ID:   docker://1c3dcd7cabea668eb5e947a1fbf9bf5b8837220c52b32e75eced9e198b4c3149
    Image:          nginx:1.7.9
    Image ID:       docker-pullable://nginx@sha256:e3456c851a152494c3e4ff5fcc26f240206abac0c9d794affb40e0714846c451
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Sat, 24 Aug 2019 14:54:44 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-zt8dv (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  default-token-zt8dv:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-zt8dv
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
# 记录了pod的启动过程,如果操作失败(eg:image不存在),也可以在这里查到原因
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  20m   default-scheduler  Successfully assigned default/nginx-deployment-748ff87d9d-25k5w to server3
  Normal  Pulling    20m   kubelet, serv
### Kubernetes DeploymentPod 概述 Kubernetes 是一种用于自动化部署、扩展和管理容器化应用的开源平台。DeploymentPodKubernetes 中两个核心概念。 #### Pod 定义与功能 Pod 是可以在 Kubernetes创建管理的最小可部署单元[^1]。每个 Pod 都有一个唯一的 IP 地址,可以包含多个紧密关联的应用容器共享网络和存储资源。这些特性使得 Pod 成为了运行单个微服务实例的理想选择。 对于需要持久化的数据,可以通过定义 PersistentVolumeClaim 来挂载外部存储卷至 Pod 内部。这允许即使在 Pod 被销毁重建之后仍然能够保留重要文件或数据库记录等信息。 ```yaml apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - name: nginx-container image: nginx volumeMounts: - mountPath: /data name: storage-volume volumes: - name: storage-volume persistentVolumeClaim: claimName: my-storage-claim ``` #### Deployment 控制器的作用 Deployment 对象提供了一种声明式的更新应用程序的方式。通过指定期望的状态来描述一组无状态副本集 (ReplicaSet),并由控制器自动调整实际状态使之匹配预期设置。当修改了 Deployment 的模板部分时,它会触发滚动升级过程,在此期间旧版本的服务不会中断正常运作直到新镜像完全替换完毕为止。 此外,还可以利用 RollingUpdate 策略实现零停机时间发布;如果遇到问题,则支持回滚操作恢复之前的稳定版次。 ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: web-deployment spec: replicas: 3 selector: matchLabels: app: webapp template: metadata: labels: app: webapp spec: containers: - name: frontend image: "nginx" ports: - containerPort: 80 protocol: TCP ``` #### 最佳实践建议 - **健康检查**:为 Pods 设置 LivenessProbe 和 ReadinessProbe 探针以监控其存活状况和服务就绪情况。 - **资源请求与限制**:合理规划 CPU 及内存的需求量级,防止因过度分配而导致节点过载或者浪费集群计算能力。 - **日志收集**:集成集中式日志管理系统如 ELK Stack 或者 Fluentd ,便于后续排查错误原因及性能分析。 - **安全上下文配置**:遵循最小权限原则授予必要的访问控制权给各个组件,并启用 SELinux/AppArmor 进行强制访问控制增强安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值