Administrator
Published on 2022-04-27 / 300 Visits
0

k8s Pod与Deployment

Pod

一.概念

内容

  • Pod 是k8s系统中可以创建和管理的最小单元。
  • Pod相当于逻辑主机,每个Pod都有自己的IP地址。
  • Pod里面是由一个或多个容器组成,Pod内的容器共享网络命名空间(相同的IP地址和网络端口)。
  • 一个worker节点可以存在多个Pod,主节点会考量工作节点的负载自动调度 Pod到哪个节点运行,也可以手动指定Pod到哪个工作节点运行。
  • 其他的负载(比如Deployment)一般都是为Pod服务的,因为Pod为实际的业务运行。

参考

https://zhuanlan.zhihu.com/p/60905652
https://blog.csdn.net/qq_38304320/article/details/121051583

二.运行方式

命令行

kubectl run testapp --image=ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1

run后面传递Pod的名称,--image指定镜像

yaml文件

kubectl apply -f app.yaml

其中app.yaml是一个文件,文件名自定义,内容参考‘yaml配置文件示例’

三.命令

1.查看当前运行的Pod,简单

kubectl get pod

2.查看当前运行的Pod,稍微详细

kubectl get pod -o wide

3.查看具体Pod信息,超级详细

kubectl describe pod pod-name

4.查看Pod日志

kubectl logs pod-name

此命令输出完日志就结束了,可以加上-f实时输出。

5.进入Pod里的某个容器

kubectl exec -it pod-name -- bash

使用参数-c container-name可以指定进入某个容器,否则就是默认的容器(因为pod可以有多个容器)

6.将端口映射到Pod

kubectl port-forward pod-name 8090:8080

此行意思的将外部主机的8090端口映射到名称为pod-name的Pod,从而可以在外部主机进行访问。
注意此命令行是前台运行,ctrl+c退出即会失效。

四.yaml配置文件示例

内容

# 版本
apiVersion: v1
# 类型
kind: Pod
metadata:
  # 名称
  name: test-pod 
spec:
  # 定义容器,可以多个
  containers:
      # 容器名字
    - name: test-k8s 
      # 镜像
      image: ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1 

apiVersion

说明

指的是此api组件对应的版本,比如v1对应pod,service等;apps/v1对应Deployments等。
此值不仅指明此组件的版本,还起了点‘分类’的作用,比如apps/v1中的apps指的就是一些通用的应用层的api。

参考

https://www.jianshu.com/p/9318374b7072

Deployment

一.概念

在集群中,如果单独创建一个个Pod很麻烦,可以利用此api对Pod进行批量的管理。
Deployment通过label去关联Pod。

二.运行方式

yaml文件

kubectl apply -f app.yaml

其中app.yaml是一个文件,文件名自定义,内容参考‘yaml配置文件示例’

三.命令

1.查看当前运行的Deployment

kubectl get deployment

2.伸缩扩展副本

kubectl scale deployment test-k8s --replicas=5

--replicas的值是扩展后的总数,而不是要增加的数。
test-k8s指的是具体要匹配pod的标签。

3.查看版本历史

kubectl rollout history deployment test-k8s

test-k8s指的是具体要匹配pod的标签。

4.回到上个版本

kubectl rollout undo deployment test-k8s

5.回到指定版本

kubectl rollout undo deployment test-k8s --to-revision=2

6.删除deployment及其对应的Pod

kubectl delete deployment test-k8s

删除deployment,并且删除其生成的Pod

7.重新部署

kubectl rollout restart deployment test-k8s

8.修改镜像

kubectl set image deployment test-k8s test-k8s=ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v2-with-error --record

--record 表示把这个命令记录到操作历史中

9.暂停和恢复运行

kubectl rollout pause deployment test-k8s
kubectl rollout resume deployment test-k8s

暂停后,对 deployment 的修改不会立刻生效,恢复后才应用设置

10.输出到yaml

kubectl get deployment test-k8s -o yaml >> app2.yaml

四.yaml配置文件示例

apiVersion: apps/v1
kind: Deployment
metadata:
  # 部署名字
  name: test-k8s
#具体的数据
spec:
  # pod的数量
  replicas: 2
  # 用来查找关联的 Pod,所有标签都匹配才行
  selector:
    matchLabels:
      app: test-k8s #匹配pod的标签
  # 定义 Pod 相关数据
  template:
    metadata:
      labels:
        app: test-k8s
    spec:
      # 定义容器,可以多个
      containers:
      - name: test-k8s # 容器名字
        image: ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1 # 镜像

Pod与Deployment的yaml文件对比

16518448481.png