一、環(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之間切換