摘要:所以,我們使用或訪問是不合適的,我們需要提供一個固定及端口。創建一個用法創建現在,我們就可以在節點上通過訪問。我們創建一個客戶端,來測試查看的解析,發現是。在瀏覽器訪問發現是可以訪問的未截圖使用任意的均可
創建一個deployment
[root@master ~]# kubectl run --help Create and run a particular image, possibly replicated. Creates a deployment or job to manage the created container(s). Usage: kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...] [options]
使用如下命令:
[root@master ~]# kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1 --dry-run=true deployment.apps/nginx-deploy created (dry run) [root@master ~]# kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1 deployment.apps/nginx-deploy created [root@master ~]# kubectl get deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx-deploy 1 1 1 1 7s [root@master ~]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE nginx-deploy-5b595999-nzlmj 1/1 Running 0 1m 10.244.2.14 node02
創建了一個名為 nginx-deploy 的deployment,副本設置為1, 查看pod,發現生成了一個nginx的pod,且該pod運行在node02上,ip為 10.244.2.14 ,檢查node02的網絡
[root@node02 ~]# ip a|grep -A5 cni0 5: cni0:mtu 1450 qdisc noqueue state UP qlen 1000 link/ether 0a:58:0a:f4:02:01 brd ff:ff:ff:ff:ff:ff inet 10.244.2.1/24 scope global cni0 valid_lft forever preferred_lft forever inet6 fe80::980e:b1ff:fee7:a26f/64 scope link valid_lft forever preferred_lft forever 8: veth23ea238e@if3: mtu 1450 qdisc noqueue master cni0 state UP link/ether 32:26:f6:cb:a0:9f brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet6 fe80::3026:f6ff:fecb:a09f/64 scope link valid_lft forever preferred_lft forever
可以發現,pod是跑在cni網橋上的。
Pod此時可以在節點端通過Pod ip訪問。
當我們刪除這個pod后,Deployment會重新創建一個pod,該pod的ip就會變化。
[root@master ~]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE nginx-deploy-5b595999-nzlmj 1/1 Running 0 1m 10.244.2.14 node02[root@master ~]# kubectl delete pod nginx-deploy-5b595999-nzlmj pod "nginx-deploy-5b595999-nzlmj" deleted [root@master ~]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE nginx-deploy-5b595999-z76bn 1/1 Running 0 4s 10.244.1.16 node01
所以,我們使用pod ip或pod hostname訪問是不合適的,我們需要提供一個固定ip及端口。service可以滿足要求。
創建一個service用法
[root@master ~]# kubectl expose --help Expose a resource as a new Kubernetes service. Usage: kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] [options]
創建service
[root@master ~]# kubectl expose deployment nginx-deploy --name=nginx --port=80 --target-port=80 --protocol=TCP service/nginx exposed [root@master ~]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1443/TCP 8h nginx ClusterIP 10.101.41.108 80/TCP 7s
現在,我們就可以在節點上通過ip 10.101.41.108 訪問。在節點外部無法訪問。
這類地址,更多時候是被pod客戶端訪問的。
我們創建一個pod客戶端,來測試:
[root@master ~]# kubectl run client --image=busybox --replicas=1 -it --restart=Never If you don"t see a command prompt, try pressing enter. / # cat /etc/resolv.conf nameserver 10.96.0.10 search default.svc.cluster.local svc.cluster.local cluster.local options ndots:5 / #
查看pod的dns解析,發現nameserver是 10.96.0.10 。這個ip是coredns的service ip。
[root@master ~]# kubectl get svc -n kube-system -o wide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kube-dns ClusterIP 10.96.0.1053/UDP,53/TCP 9h k8s-app=kube-dns
此時,在busybox這個pod里,我們可以直接通過service name nginx 訪問之前創建的service,而不是service的ip:port。
# busybox里 / # wget nginx Connecting to nginx (10.101.41.108:80) index.html 100% |**************************************************************************************| 612 0:00:00 ETA / # wget -O - -q http://nginx:80Welcome to nginx!
注意: 10.101.41.108是nginx的service的ip。
此時,我們人為將nginx的pod搞掛。
[root@master ~]# kubectl delete pod nginx-deploy-5b595999-z76bn pod "nginx-deploy-5b595999-z76bn" deleted [root@master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE client 1/1 Running 0 8m nginx-deploy-5b595999-j6p8g 1/1 Running 0 4s
再次在busybox里面訪問nginx
# busybox里 / # wget -O - -q http://nginx:80Welcome to nginx!
nginx依舊可以訪問。
可以通過如下命令,獲取service后端的pod ip
[root@master ~]# kubectl describe service nginx Name: nginx Namespace: default Labels: run=nginx-deploy Annotations:動態修改Selector: run=nginx-deploy Type: ClusterIP IP: 10.101.41.108 Port: 80/TCP TargetPort: 80/TCP Endpoints: 10.244.2.17:80 Session Affinity: None Events:
我們創建一個 myapp 的deployment
[root@master ~]# kubectl run myapp --image=ikubernetes/myapp:v1 --replicas=2 deployment.apps/myapp created [root@master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE client 1/1 Running 0 17m myapp-848b5b879b-4dz7h 1/1 Running 0 7s myapp-848b5b879b-wjktr 1/1 Running 0 7s nginx-deploy-5b595999-j6p8g 1/1 Running 0 8m [root@master ~]# kubectl get deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE myapp 2 2 2 2 28s nginx-deploy 1 1 1 1 38m
創建一個 myapp-svc 的service
[root@master ~]# kubectl expose deployment myapp --name=myapp-svc --port=80 service/myapp-svc exposed [root@master ~]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1443/TCP 9h myapp-svc ClusterIP 10.105.155.237 80/TCP 7s nginx ClusterIP 10.101.41.108 80/TCP 28m
這時候,在busybox pod里可以通過myapp-svc來訪問
# busybox pod里 # 10.244.1.17是pod的ip / # wget -O - -q 10.244.1.17 Hello MyApp | Version: v1 | Pod Name / # wget -O - -q myapp-svc Hello MyApp | Version: v1 | Pod Name
/ # while true; do wget -O - -q myapp-svc/hostname.html; sleep 1;done myapp-848b5b879b-wjktr myapp-848b5b879b-wjktr myapp-848b5b879b-4dz7h myapp-848b5b879b-wjktr myapp-848b5b879b-4dz7h myapp-848b5b879b-4dz7h
可以發現,后端的pod會有兩個。
動態修改將deployment myapp的副本修改為5個。
[root@master ~]# kubectl scale --replicas=5 deployment myapp deployment.extensions/myapp scaled [root@master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE client 1/1 Running 0 24m myapp-848b5b879b-28crc 1/1 Running 0 6s myapp-848b5b879b-4dz7h 1/1 Running 0 7m myapp-848b5b879b-9dp4m 1/1 Running 0 6s myapp-848b5b879b-g4pzd 1/1 Running 0 6s myapp-848b5b879b-wjktr 1/1 Running 0 7m nginx-deploy-5b595999-j6p8g 1/1 Running 0 16m
此時,在busybox pod里訪問:
/ # while true; do wget -O - -q myapp-svc/hostname.html; sleep 1;done myapp-848b5b879b-g4pzd # 1 myapp-848b5b879b-9dp4m # 2 myapp-848b5b879b-9dp4m myapp-848b5b879b-wjktr # 3 myapp-848b5b879b-28crc # 4 myapp-848b5b879b-4dz7h # 5 myapp-848b5b879b-28crc myapp-848b5b879b-4dz7h
縮減為3個
[root@master ~]# kubectl scale --replicas=3 deployment myapp deployment.extensions/myapp scaled [root@master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE client 1/1 Running 0 26m myapp-848b5b879b-28crc 0/1 Terminating 0 2m myapp-848b5b879b-4dz7h 1/1 Running 0 9m myapp-848b5b879b-9dp4m 1/1 Running 0 2m myapp-848b5b879b-g4pzd 0/1 Terminating 0 2m myapp-848b5b879b-wjktr 1/1 Running 0 9m nginx-deploy-5b595999-j6p8g 1/1 Running 0 18m滾動更新
現在更新pod的鏡像
## 鏡像的具體信息可以通過kubectl describe pod pod_name獲取 [root@master ~]# kubectset image deployment myapp myapp=ikubernetes/myapp:v2 deployment.extensions/myapp image updated [root@master ~]# kubectl rollout status deployment myapp Waiting for deployment "myapp" rollout to finish: 1 old replicas are pending termination... Waiting for deployment "myapp" rollout to finish: 1 old replicas are pending termination... Waiting for deployment "myapp" rollout to finish: 1 old replicas are pending termination... Waiting for deployment "myapp" rollout to finish: 4 of 5 updated replicas are available... deployment "myapp" successfully rolled out
在busybox pod上觀察
Hello MyApp | Version: v1 | Pod Name Hello MyApp | Version: v1 | Pod Name Hello MyApp | Version: v2 | Pod Name Hello MyApp | Version: v2 | Pod Name Hello MyApp | Version: v2 | Pod Name Hello MyApp | Version: v1 | Pod Name Hello MyApp | Version: v1 | Pod Name Hello MyApp | Version: v2 | Pod Name Hello MyApp | Version: v1 | Pod Name Hello MyApp | Version: v2 | Pod Name Hello MyApp | Version: v2 | Pod Name Hello MyApp | Version: v2 | Pod Name Hello MyApp | Version: v2 | Pod Name Hello MyApp | Version: v2 | Pod Name
可以發現,會有一段時間v1和v2版本會共存,后續更新完畢后,所有pod版本都會變為v2版本。
回滾可以直接修改image
也可以使用undo
master節點上執行undo
[root@master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE client 1/1 Running 0 34m myapp-74c94dcb8c-5hflp 1/1 Running 0 3m myapp-74c94dcb8c-6klpb 1/1 Running 0 3m myapp-74c94dcb8c-gsrbj 1/1 Running 0 3m myapp-74c94dcb8c-jfzzr 1/1 Running 0 3m myapp-74c94dcb8c-p55sz 1/1 Running 0 3m nginx-deploy-5b595999-j6p8g 1/1 Running 0 26m [root@master ~]# kubectl rollout undo deployment myapp deployment.extensions/myapp [root@master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE client 1/1 Running 0 36m myapp-848b5b879b-5bvtk 1/1 Running 0 34s myapp-848b5b879b-8dh6r 1/1 Running 0 33s myapp-848b5b879b-dzsxq 1/1 Running 0 35s myapp-848b5b879b-gbrqg 1/1 Running 0 35s myapp-848b5b879b-vh4l9 1/1 Running 0 35s nginx-deploy-5b595999-j6p8g 1/1 Running 0 28m
可以發現myapp的pod全部改變了。去busybox pod中查看:
Hello MyApp | Version: v2 | Pod Name Hello MyApp | Version: v2 | Pod Name Hello MyApp | Version: v2 | Pod Name Hello MyApp | Version: v1 | Pod Name Hello MyApp | Version: v1 | Pod Name Hello MyApp | Version: v1 | Pod Name Hello MyApp | Version: v1 | Pod Name Hello MyApp | Version: v1 | Pod Name Hello MyApp | Version: v1 | Pod Name Hello MyApp | Version: v1 | Pod Name Hello MyApp | Version: v1 | Pod Name
自動擴縮容: 依賴資源使用狀態。
在集群外訪問修改svc myapp-svc
kubectl edit svc myapp-svc # 將type: ClusterIP修改為 type: NodePort
之后,查看svc
[root@master ~]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1443/TCP 9h myapp-svc NodePort 10.105.155.237 80:30724/TCP 24m nginx ClusterIP 10.101.41.108 80/TCP 53m
發現myapp-svc綁定了30724端口。
在windows瀏覽器訪問url nodeIP:30724 發現是可以訪問的(未截圖)
使用任意node的ip均可
[root@master ~]# while true; do wget -O - -q 192.168.18.128:30724; sleep 0.3;done Hello MyApp | Version: v1 | Pod Name Hello MyApp | Version: v1 | Pod Name Hello MyApp | Version: v1 | Pod Name ^C [root@master ~]# while true; do wget -O - -q 192.168.18.129:30724; sleep 0.3;done Hello MyApp | Version: v1 | Pod Name Hello MyApp | Version: v1 | Pod Name Hello MyApp | Version: v1 | Pod Name Hello MyApp | Version: v1 | Pod Name ^C [root@master ~]# while true; do wget -O - -q 192.168.18.130:30724; sleep 0.3;done Hello MyApp | Version: v1 | Pod Name Hello MyApp | Version: v1 | Pod Name Hello MyApp | Version: v1 | Pod Name Hello MyApp | Version: v1 | Pod Name
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/32701.html
摘要:解決了密碼密鑰等敏感數據的配置問題,使用可以避免把這些敏感數據以明文的形式暴露到鏡像或者中。可以以或者環境變量的方式使用。 Secret解決了密碼、token、密鑰等敏感數據的配置問題,使用Secret可以避免把這些敏感數據以明文的形式暴露到鏡像或者Pod Spec中。 Secret可以以Volume或者環境變量的方式使用。 使用如下命令行創建一個secret: kubectl cre...
摘要:解決了密碼密鑰等敏感數據的配置問題,使用可以避免把這些敏感數據以明文的形式暴露到鏡像或者中。可以以或者環境變量的方式使用。 Secret解決了密碼、token、密鑰等敏感數據的配置問題,使用Secret可以避免把這些敏感數據以明文的形式暴露到鏡像或者Pod Spec中。 Secret可以以Volume或者環境變量的方式使用。 使用如下命令行創建一個secret: kubectl cre...
摘要:解決了密碼密鑰等敏感數據的配置問題,使用可以避免把這些敏感數據以明文的形式暴露到鏡像或者中。可以以或者環境變量的方式使用。 Secret解決了密碼、token、密鑰等敏感數據的配置問題,使用Secret可以避免把這些敏感數據以明文的形式暴露到鏡像或者Pod Spec中。 Secret可以以Volume或者環境變量的方式使用。 使用如下命令行創建一個secret: kubectl cre...
摘要:相關基于項目和項目,并遵循應用的十二因素風格。相關在設計上,項目盡量保持驅動和模塊化,以便模塊支持不同的實現方案。相關不僅可以管理眾多虛擬機,其計算服務還支持對的驅動,管理引擎的子項目還可用于通過模板管理容器。現已整合公司所支持的項目。 整理自《Docker技術入門與實踐》 PaaS(Platform as a Service) PaaS 是希望提供一個統一的可供所有軟件直接運行而無需...
摘要:的本身是無狀態的生命周期通常比較短,只要出現了異常,就會自動創建一個新的來代替它。為了實現內數據的存儲管理,引入了兩個資源持久卷,以下簡稱和持久卷申請,以下簡稱。跟里的卷類似,不過會有獨立于的生命周期。 Kubernetes的pod本身是無狀態的(stateless),生命周期通常比較短,只要出現了異常,Kubernetes就會自動創建一個新的Pod來代替它。 而容器產生的數據,會隨著...
閱讀 2169·2021-09-04 16:40
閱讀 1466·2021-08-13 15:07
閱讀 3609·2019-08-30 15:53
閱讀 3200·2019-08-30 13:11
閱讀 1078·2019-08-29 17:22
閱讀 1819·2019-08-29 12:47
閱讀 1479·2019-08-29 11:27
閱讀 2233·2019-08-26 18:42