目錄
案例:自主式創建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文件