【學(xué)習(xí)筆記01】每天5分鐘,玩轉(zhuǎn)kubernetes-01(k8s跑起來(lái))

第一章 先把Kubernetes跑起來(lái)

1.1 先跑起來(lái)

k8s官網(wǎng)已經(jīng)為大家準(zhǔn)備好了一個(gè)現(xiàn)成的最小可用系統(tǒng)。
   https://kubernetes.io/docs/tutorials/kubernetes-basics/

1.2 創(chuàng)建K8s集群

https://kubernetes.io/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive/
全屏后就是一個(gè)模擬的linux系統(tǒng)。

kubectl version  //查看版本
kubectl get nodes
kubectl get pods
kubectl cluster-info            // 查看集群信息
kubectl cluster-info dump // 集群詳細(xì)信息

1.3 部署應(yīng)用

kubectl create deployment -h : 這個(gè)命令用來(lái)部署一個(gè)應(yīng)用

kubectl version
docker pull docker.io/jocatalin/kubernetes-bootcamp:v1
kubectl create deployment  kubernetes-bootcamp --image=docker.io/jocatalin/kubernetes-bootcamp:v1
kubectl get deployment 
NAME                     DESIRED          CURRENT        UP-TO-DATE            AVAILABLE            AGE
kubernetes-bootcamp     1                   1                           1                             1                            11s

說(shuō)明:\color{red}{Kubenete v15.x 環(huán)境下,使用書(shū)上如下run命令會(huì)出錯(cuò)}

kubectl run kubernetes-bootcamp --image=docker.io/jocatalin/kubernetes-bootcamp:v1 --port=8080            // 啟動(dòng)pod

  • image: 指定鏡像。
  • port : 設(shè)置應(yīng)用對(duì)外服務(wù)的端口。
  • pod: 緊密相關(guān)的一組容器放到一個(gè)Pod中,同一個(gè)Pod中的容器共享IP地址和Port空間。
    上面命令運(yùn)行后:使用 kubectl get deployment

1.4 訪問(wèn)應(yīng)用

默認(rèn)情況下,所有Pod只能在集群內(nèi)部訪問(wèn)。對(duì)于上邊的例子,要訪問(wèn)應(yīng)用只能直接訪問(wèn)8080端口。為了能從外部訪問(wèn)應(yīng)用,我們需要將容器的8080端口映射到節(jié)點(diǎn)的端口。
kubectl expose // 將資源(deployment、service、replica set、replication controllerpod )暴露為新的Kubernetes Service。并使用該資源的選擇器作為指定端口上新服務(wù)的選擇器。

kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port=8080
#結(jié)果:
service/kubernetes-bootcamp exposed
#查看services:
$ kubectl get services
 kubectl get services
NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes            ClusterIP   10.10.0.1       <none>        443/TCP          7d1h
kubernetes-bootcamp   NodePort    10.10.185.138   <none>        8080:30203/TCP   77m

#說(shuō)明:
 NodePort:   表示外界可以通過(guò)訪問(wèn)node port 的30203(這個(gè)是隨機(jī)的)訪問(wèn)這個(gè)服務(wù)。
 Service:可以暫時(shí)理解為端口映射。
#
$ hostname                                // 查看當(dāng)前的host name
 minikube
$ curl k8s-master:30203              // 訪問(wèn)服務(wù)
  Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-56cdd766d-rwrs6 | v=1

1.5 scale 應(yīng)用

$ kubectl scale deployments/kubernetes-bootcamp --replicas=3           // 增加副本數(shù)量
     deployment.extensions/kubernetes-bootcamp scaled
$ kubectl get deployment
    NAME                              DESIRED     CURRENT   UP-TO-DATE  AVAILABLE   AGE
    kubernetes-bootcamp              3                  3                 3                     3                19m

#查看kubectl get pods, 發(fā)現(xiàn)是三個(gè)pods在運(yùn)行:
kubectl get pods 
NAME                                   READY   STATUS    RESTARTS   AGE
curl-6bf6db5c4f-h9bf7                  1/1     Running   0          151m
kubernetes-bootcamp-58b4678d9f-b4djs   1/1     Running   0          5m20s
kubernetes-bootcamp-58b4678d9f-kz4bj   1/1     Running   0          76m
kubernetes-bootcamp-58b4678d9f-lkmkf   1/1     Running   0          5m20s

然后再訪問(wèn)service: 發(fā)現(xiàn)后端的請(qǐng)求被打散到不同的容器,這樣就實(shí)現(xiàn)了負(fù)載均衡。

[root@k8s-master-122132071 minikube]# curl k8s-master-122132071:30203
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-58b4678d9f-kz4bj | v=1
[root@k8s-master-122132071 minikube]# curl k8s-master-122132071:30203
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-58b4678d9f-lkmkf | v=1
[root@k8s-master-122132071 minikube]# curl k8s-master-122132071:30203
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-58b4678d9f-b4djs | v=1

1.6 滾動(dòng)更新(rolling update)

當(dāng)前使用image的版本為v1, 執(zhí)行如下命令將其升級(jí)到v2:

$ kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
    deployment.extensions/kubernetes-bootcamp image updated

#舊pod會(huì)逐漸被清除,新的pod逐漸啟動(dòng)。
kubectl get pods 
NAME                                   READY   STATUS        RESTARTS   AGE
curl-6bf6db5c4f-h9bf7                  1/1     Running       0          155m
kubernetes-bootcamp-58b4678d9f-b4djs   1/1     Terminating   0          8m53s
kubernetes-bootcamp-58b4678d9f-kz4bj   1/1     Terminating   0          80m
kubernetes-bootcamp-58b4678d9f-lkmkf   1/1     Terminating   0          8m53s
kubernetes-bootcamp-dd569fc9c-5sdc8    1/1     Running       0          8s
kubernetes-bootcamp-dd569fc9c-ck7dd    1/1     Running       0          19s

上面的更改立即生效,pod會(huì)逐漸被清除,新的pod逐漸啟動(dòng)。

要想回退到原來(lái)的版本: kubectl rollout undo deployments/kubernetes-bootcamp

參考:

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

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

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