目录
案例:自主式创建service并关联上面的pod
案例:部署redis
案例:部署myapp
案例:部署MySQL数据库
总结
1.K8S集群中访问流向
K8S集群外部:客户端——nodeIP:nodeport——通过target port——podIP:containerport
2.语法格式
3.yaml文件组成部署
4.常用字段的含义
案例:自主式创建service并关联上面的pod
资源名称:my-nginx-kkk
命名空间:my-kkk
容器镜像:nginx:1.21
容器端口:80
标签:njzb: my-kkk
创建 server去关联上面的pod
结果:首先修改页面:tian wai lai wu,对外访问,输入地址就能访问
1. 试创建文件获取模板文件
kubectl create ns my-kkk --dry-run -oyaml
kubectl run my-nginx-kkk --image=nginx:1.21 --port=80 --dry-run -oyaml > pod.yaml
2. 编写yaml文件
kubectl get svc
kubectl get svc nginx -oyaml
vim pod.yaml
kubectl apply -f pod.yaml
kubectl get svc,pod -n my-kkk
将获取的yaml资源内容复制过来,进行修改
vim pod.yamlapiVersion: v1
kind: Namespace
metadata:name: my-kkk
---
apiVersion: v1
kind: Pod
metadata:labels:njzb: my-kkkname: my-nginx-kkknamespace: my-kkk
spec:containers:- image: nginx:1.21name: my-nginx-kkkports:- containerPort: 80restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:labels:njzb: my-kkkname: my-nginx-kkknamespace: my-kkk
spec:ports:- nodePort: 31111 ###节点端口号port: 80 ###服务暴露端口protocol: TCP ###通信协议targetPort: 80 ###要转发到的容器端口selector:njzb: my-kkk ###该服务所选择的后端podtype: NodePort
3. 测试结果
案例:部署redis
[root@master01 demo]# vim redis.yaml apiVersion: apps/v1
kind: Deployment
metadata:name: redis-dpmlabels:app: redis
spec: ###资源所需参数replicas: 1selector:matchLabels:app: redis ###只会与标签app:redis的pod关联template: ###业务模板,如果有多个副本,所有副本属性会按照模板进行匹配metadata:labels:app: redisspec: ###资源所需参数containers:- name: redisimage: redis:latestports:- containerPort: 6379
---
apiVersion: v1
kind: Service
metadata:name: redis-dbmlabels:app: redis
spec:selector:app: redisports:- nodePort: 32379port: 6379protocol: TCPtargetPort: 6379type: NodePort
[root@master01 home]# kubectl get svc,pod
案例:部署myapp
apiVersion: apps/v1
kind: Deployment
metadata:name: myapp-kknamespace: defaultlabels:app: myapp
spec:replicas: 1selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: myappimage: soscscs/myapp:v1ports:- containerPort: 80
案例:部署MySQL数据库
[root@master01 demo]# cat mysql.yaml
apiVersion: v1
kind: Namespace
metadata:name: devops
---
apiVersion: apps/v1
kind: Deployment
metadata:name: devops-mysqlnamespace: devops
spec:replicas: 1revisionHistoryLimit: 5 ###保留5个可以回滚的历史纪录strategy:type: RollingUpdate ###更新策略为:RollingUpdate;在进行更新时,将旧pod副本替换为 新的pod,确保服务的可用性selector:matchLabels:app: devops-mysqltemplate:metadata:labels:app: devops-mysqlspec:volumes:- name: devops-mysqlnfs:server: 192.168.91.104path: /root/data/nfs/mysql/devopscontainers:- name: devops-mysqlimage: mysql:5.7env:- name: MYSQL_ROOT_PASSWORDvalue: abc123imagePullPolicy: Alwaysports:- containerPort: 3306volumeMounts:- name: devops-mysqlmountPath: /var/lib/mysql
---
apiVersion: v1
kind: Service
metadata:name: devops-mysqlnamespace: devops
spec:ports:- port: 3306protocol: TCPtargetPort: 3306nodePort: 30011selector:app: devops-mysqltype: NodePortsessionAffinity: ClientIP ###确保与客户端的会话一致性
[root@master01 demo]# vim mysql.yaml
[root@master01 demo]# kubectl apply -f mysql.yaml
[root@master01 home]# kubectl get svc,pod -n devops
总结
1.K8S集群中访问流向
port:为service在clusterIP上暴露的端口
targetport:对应容器映射在pod上的端口
nodeport:可以通过在K8S集群外部使用nodeIP+nodePort来去访问service
containerport:容器内部使用的端口
K8S集群内部:客户端——clusterIP:port——通过target port——podIP:containerport
K8S集群外部:客户端——nodeIP:nodeport——通过target port——podIP:containerport
2.语法格式
通过缩进表示层级关系
不能使用tab进行缩进,只能使用空格,一般开头缩进2个空格
字符后缩进一个空格,比如冒号,逗号等
使用—表示新的yaml文件的开始
使用#表示注释
3.yaml文件组成部署
(1)控制器定义
deployment:定义metadaea、spec、selector
通过yaml完成副本的定义,自主式的
(2)被控制对象
由哪一个控制器(自主式、deployment、statusfulset等)
4.常用字段的含义
如何快速编写yaml
(1)第一种使用kubectl create 命令生成yaml文件
(2)第二种使用kubectl get 命令导出yaml文件