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 # 镜像