目录
1.编写pod.yaml
vim demo1-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: scj-pod
namespace: xy101
labels:
app: nginx
mylove: tangjun
myclass: xy101
spec:
containers:
- name: nginx
image: nginx:1.20
ports:
- containerPort: 80
name: http
protocol: TCP
env:
- name: mylove
value: tangjun
各行详细介绍
使用kubectl explain pods可查看到编写pod的一级标题
- apiVersion: apps/v1 #指定api版本标签
- kind: Deployment #定义资源的类型/角色,deployment为副本控制器,此处资源类型可以是Deployment、Job、Ingress、Service等
- metadata: #定义资源的元数据信息,比如资源的名称、namespace、标签等信息
- spec: #定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
metadata: #定义资源的元数据信息,比如资源的名称、namespace、标签等信息
kubectl explain pods.metadata 进一步查看metadata所包含内容
书写格式:
<string> 字符串 字段: 字符串 字段: "字符串" 字段: '字符串'
<map[string]string> 映射(值是一个或多个键值对) 字段:
key1: value1
key2: value2
spec: #定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
kubectl explain pods.spec #进一步查看spec
containers <[]Object> -required- #-required-表示必备字段;<[]Object>表示字符串列表
格式
<[]Object>字段: 字段: ["值1", "值2"]
值1
值2
containers: #定义容器属性
kubectl explain pods.spec.containers #进一步查看containers字段
kubectl explain pods.spec.containers.ports
kubectl explain pods.spec.containers.env
kubectl apply -f demo1-pod.yaml #创建pod
kubectl get pods -n xy101 #查看pod
kubectl describe -n xy101 pod scj-pod #可查看调度创建容器的具体过程
kubectl get -n xy101 pod --show-labels #查看标签
kubectl exec -n xy101 -it scj-pod sh #进入容器查看env
2.编写deploment.yaml
vim demo2-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: scj-deploy
namespace: xy101
labels:
app: nginx
mylove: tangjun
spec:
replicas: 5
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.20
ports:
- containerPort: 80
name: http
protocol: TCP
env:
- name: mylove
value: tangjun
- name: yourlove
value: scj
查看编写deployment.yaml文件的第一字段
kubectl explain deployment #查看编写deployment的第一字段
查看第一字段下metadata和spec下的字段
kubectl explain deployment.metadata #可根据此命令进一步查看metadata字段
metadata: #其中包含三大项必不可少,name、namespace、labels
name: scj-deploy
namespace: xy101
labels:
app: nginx
mylove: tangjun
kubectl explain deployment.spec #进一步查看spec的字段
查看spec下selector的字段
kubectl explain deployment.spec.selector #查询selector的字段
matchLabels: #定义匹配标签
查看spec下template的字段
kubectl explain deployment.spec.template #查看spec中template字段下的字段
metadata #定义pod元数据 通常主要定义labels,labels的值需要与标签选择器的值一致
spec #定义pod属性
查看template下spec的字段
kubectl explain deployment.spec.template.spec #查看template下spec字段
containers <[]Object> -required- #必选字段
kubectl explain deployment.spec.template.spec.containers #进一步查看spec下containers 字段
kubectl explain deployment.spec.template.spec.containers.ports #进一步查看containers下ports字段
查看spec下containers中的字段
kubectl explain deployment.spec.template.spec.containers
查看containers下ports的字段
kubectl explain deployment.spec.template.spec.containers.ports
查看containers下的env字段
kubectl explain deployment.spec.template.spec.containers.env
创建deployment控制器
kubectl apply -f demo2-deploy.yaml
kubectl get -n xy101 all
3.编写service.yaml关联创建的pod
apiVersion: v1
apiVersion: v1
kind: Service
metadata:
name: scj-svc
namespace: xy101
labels:
app: nginx
mylove: tangjun
spec:
selector:
app: nginx
type: NodePort
ports:
- port: 8080
targetPort: 80
查看编写svc.yaml文件的第一字段
kubectl explain svc
metadata三要素1.name2.namespace3.labels
设置spec下的字段
kubectl explain svc.spec
进一步查看spec下ports的字段
kubectl explain svc.spec.ports
创建service
kubectl apply -f demo3-svc.yaml
kubectl get -n xy101 svc
kubectl describe -n xy101 endpoints scj-svc
kubectl get -n xy101 pod -o wide
如何固定nodeport、clusterip
kubectl explain svc.spec.ports #查询指定nodeport的字段,于ports下
kubectl explain svc.spec #查询指定clusterip的字段,于svc下的spec中
kubectl apply -f demo3-svc.yaml
kubectl get -n xy101 svc
kubectl apply -f demo3-svc.yaml
kubectl get -n xy101 svc
4.总结获取K8S资源配置清单文件模板方法
方法1:根据现有资源导出yaml文件修改配置,重新创建
kubectl get -n xy101 svc scj-svc -o yaml > demo4.yaml
vim demo4.yaml
只保留常用配置,删除多余的,配置,进行修改创建即可
方法2:根据现有资源,进入其配置中,复制模板,再进行创建
kubectl edit -n xy101 svc scj-svc2
即可复制其中的配置,获取模板
方法3:通过--dry-run选项模拟运行创建资源的命令获取
kubectl create|run|expose -n <命名空间> <资源类型> <资源名称> [参数选项] --dry-run=client -o yaml > XXX.yaml
kubectl create -n xy101 deployment deploy-tan --image=soscscs/myapp:v1 --port=80 --replicas=3 --dry-run=client #创建资源的结尾添加--dry-run选项模拟运行创建资源,此时不会创建资源
kubectl create -n xy101 deployment deploy-tan --image=soscscs/myapp:v1 --port=80 --replicas=3 --dry-run=client -o yaml > tan-deploy.yaml #导出yaml文件,即可获取配置模板文件
方法4:手写yaml配置文件,可以根据 kubectl explain 命令获取资源的字段信息
5.补充
1.什么是external-traffic-policy
kubectl explain svc.spec #存在于 svc.spec中
在k8s的Service对象(申明一条访问通道)中,有一个"externalTrafficPolicy"字段可以设置。有2个值可以设置:Cluster或者Local。
1)Cluster表示:流量可以转发到其他节点上的Pod。
2)Local表示:流量只发给本机的Pod。
图示:
2.k8s的service如何确保客户端的tcp消息每次都发给同一个pod?
设置Service的sessionAffinity为 ClientIP. 这样同一个client的请求会被kube-proxy转发到同一个Pod。
sessionAffinity 默认是None,客户端的请求被kube-proxy按照RR或Random算法转发到service的pod set,不能保证每次发到同一个Pod。