0基礎自學linux運維-3.8-k8s deployment service 實現(xiàn)例子

一、環(huán)境說明

系統(tǒng)centos7.6

k8s:用kubeadm安裝上k8s見我的文章 《0基礎自學linux運維-3.8-Centos7 kubeadm1.14搭建k8s群集

master:192.168.3.176

node1:名字vm61 ip:192.168.3.61

node1:名字vm62 ip:192.168.3.62

二、建立nginx部署文件

#編寫部署(master節(jié)點),注意yaml空格要嚴格對稱

2.1 編寫yaml文件

mkdir -pv /disk1/myk8s

cd /disk1/myk8s/

cat>nginx-deployment.yaml<<EOF

apiVersion: apps/v1beta1

kind: Deployment

metadata:

? name: nginx-deployment

spec:

? replicas: 3

? template:

? ? metadata:

? ? ? labels:

? ? ? ? app: nginx

? ? spec:

? ? ? containers:

? ? ? - name: nginx

? ? ? ? image: nginx:1.15.12

? ? ? ? ports:

? ? ? ? - containerPort: 80

? ? ? ? volumeMounts:

? ? ? ? - mountPath: /usr/share/nginx/html

? ? ? ? ? name: test-volume

? ? ? volumes:

? ? ? - name: test-volume

? ? ? ? hostPath:

? ? ? ? ? # directory location on host

? ? ? ? ? path: /disk1/www/t1

EOF

#node vm61上操作

mkdir -pv /disk1/www/t1

echo "vm61 index.html" >/disk1/www/t1/index.html

#node vm62上操作:

mkdir -pv /disk1/www/t1

echo "vm62 index.html" >/disk1/www/t1/index.html

2.2 創(chuàng)建部署(master節(jié)點)

#--record 的 flag 設置為 true可以在 annotation 中記錄當前命令創(chuàng)建或者升級了該資源

#我推薦你使用 kubectl apply 命令,來統(tǒng)一進行 Kubernetes 對象的創(chuàng)建和更新操作

[root@vm176 myk8s]# kubectl create -f nginx-deployment.yaml --record

deployment.apps/nginx-deployment created

kubectl get po

kubectl get deployments

kubectl get rs

kubectl get pods --show-labels

2.3 更新nginx版本

#根據(jù)hub.docker.com搜索nginx知道最新版本為1.16.0

#也可以使用 kubectl edit deployment/nginx-deployment

kubectl set image deployment/nginx-deployment nginx=nginx:1.16

#如果直接修改nginx-deployment.yaml,使它生效可用apply命令

kubectl apply -f nginx-deployment.yaml --record

[root@vm176 myk8s]# kubectl rollout status deployment/nginx-deployment

Waiting for deployment "nginx-deployment" rollout to finish: 0 of 3 updated replicas are available...

Waiting for deployment "nginx-deployment" rollout to finish: 1 of 3 updated replicas are available...

Waiting for deployment "nginx-deployment" rollout to finish: 2 of 3 updated replicas are available...

Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...

Waiting for deployment "nginx-deployment" rollout to finish: 2 of 3 updated replicas are available...

deployment "nginx-deployment" successfully rolled out

kubectl get po

kubectl get deployments

kubectl get rs

kubectl get pods --show-labels

2.4 執(zhí)行pod中docker命令

#進入dokcer

kubectl exec -it pod名? sh

例子:kubectl exec -it nginx-deployment-cc8ff47b6-n95dn? sh

#直接執(zhí)行

kubectl exec? pod名 命令

例子:kubectl exec? nginx-deployment-cc8ff47b6-n95dn? cat /etc/nginx/conf.d/default.conf

[root@vm176 myk8s]# kubectl get pod

NAME? ? ? ? ? ? ? ? ? ? ? ? ? ? ? READY? STATUS? ? RESTARTS? AGE

nginx-deployment-cc8ff47b6-n95dn? 1/1? ? Running? 0? ? ? ? ? 110s

nginx-deployment-cc8ff47b6-nzrwz? 1/1? ? Running? 0? ? ? ? ? 4m10s

nginx-deployment-cc8ff47b6-tlh84? 1/1? ? Running? 0? ? ? ? ? 4m10s

三、創(chuàng)建服務

deployments部署只是創(chuàng)建集群,沒有IP地址和端口映射到主機,如果被訪問到需要有IP地址和端口,servie服務正是提供此功能

給pod套上IP和端口和其它之類的屬性

在生產(chǎn)環(huán)境中往往有負載均衡器,我可以在宿主環(huán)境中安裝一個nignx做負載均衡,指定內(nèi)網(wǎng)IP地址,在k8s中指定負載均衡地址

這里master內(nèi)部為192.168.3.176,群集IP的范圍是: 10.96.0.0/12,所以設置群集IP為10.100.3.176

3.1 master上安裝nignx

cd /disk1/myk8s/

cat>nginx-ser.yaml<<EOF

apiVersion: v1

kind: Service

metadata:

? name: nginx-ser

? labels:

? ? app: nginx-ser

spec:

? type: NodePort

? selector:

? ? app: nginx

? ports:

? - port: 81

? ? #port of pod

? ? targetPort: 80

? ? nodePort: 30080

? clusterIP: 10.100.0.80

? externalIPs:

? ? - 192.168.3.176

EOF

注:

ClusterIP:使用集群內(nèi)的私有ip —— 這是默認值

port: 為群集訪問端口

targetPort:端口是service對外暴露的端口,任何人訪問此端口都會被service代理到后端pod的80端口

nodePort:NodePort:除了使用cluster ip外,也將service的port映射到每個node的一個指定內(nèi)部port上,映射的每個node的內(nèi)部port都一樣,端口號只能30000-32767,這也多了一種形式,也是 nodeIP:port 方式訪問

externalIPs:如果外部的 IP 路由到集群中一個或多個 Node 上,Kubernetes Service 會被暴露給這些 externalIPs。 通過外部 IP(作為目的 IP 地址),進入到集群,打到 Service 的端口上的流量,將會被路由到 Service 的 Endpoint 上。

externalIPs 不會被 Kubernetes 管理,它屬于集群管理員的職責范疇。這種IP只能是節(jié)點IP地址,包括master節(jié)點和node節(jié)點

#創(chuàng)建服務

kubectl apply -f nginx-ser.yaml --record

#內(nèi)網(wǎng)訪問群集,如果訪問不了,有可能網(wǎng)絡插件自動沒有生成iptables,所以無法轉(zhuǎn)跳過去!

[root@vm176 myk8s]# curl 10.100.0.80:81

vm61 index.html

#外網(wǎng)直接訪問節(jié)點,打開瀏覽器輸入 192.168.3.61:30080

不斷刷新會發(fā)現(xiàn)在vm61和vm62之間切換

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容