日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

适合 Kubernetes 初学者的一些实战练习(一)

發布時間:2023/12/19 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 适合 Kubernetes 初学者的一些实战练习(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本系列記錄了筆者剛剛接觸并學習 Kubernetes 時動手做過的一些練習,這里分享出自己的 Kubernetes 學習歷程,希望對廣大 Kubernetes 初學者有所幫助。

練習1 - 如何在 Kubernetes 里創建一個 Nginx 應用

使用命令行 kubectl run --image=nginx nginx-app --port=80 創建一個名為 nginx-app 的應用

結果: deployment.apps/nginx-app created

使用命令行 kubectl get pods 查看創建結果,狀態已經為 running:

使用命令行 kubectl describe pods 查看 pod 明細:



把 pod id 記下來: nginx-app-f75d46bd9-q6c76

使用該 pod id 可以執行一些命令:

  • kubectl exec nginx-app-f75d46bd9-q6c76 ps aux

  • kubectl describe pod nginx-app-f75d46bd9-q6c76

  • kubectl logs nginx-app-f75d46bd9-q6c76

練習2 - 如何在 Kubernetes 里創建一個 Nginx Service

前一個練習,我們已經使用 kubectl 命令行創建了 Pod,但是在 kubernetes 中,Pod 的 IP 地址會隨著 Pod 的重啟而變化,因此用 Pod 的 IP 地址來訪問我們部署的 nginx 應用不太合適。

Kubernetes 里推薦的方式是用 Service 來消費 nginx 服務。

Service 為一組 Pod 提供一個統一的入口,并為它們提供負載均衡和服務發現支持。

使用如下命令行基于 pod 創建一個 service:

kubectl expose deployment nginx-app --type=NodePort --port=80

收到 service/nginx-app exposed 消息。

使用命令行拿到創建成功的 service 的明細:

kubectl describe service nginx-app

使用 http://<node_id>:32624 訪問這個 nginx 應用:

看到上圖說明訪問 nginx 成功了。

使用命令行查看 nginx 訪問日志:

kubectl logs nginx-app-f75d46bd9-q6c76

練習3 - Kubenetes 里 Pod 和 Service 綁定的實現方式

前一個練習,我們介紹了如何創建一個 Kubernetes pod 和 service,使用的方法是命令kubectl run.

本文介紹另一種方式,通過這種方式來學習 Kubernetes 里 pod 和對應的 service 是如何綁定的。

首先使用下面的命令行創建一個名稱為 jerry-nginx-1982 的 deployment:

kubectl create deployment jerry-nginx-1982 --image=nginx

然后使用命令行 kubectl get deployment 得到創建好的 deployment:
然后創建一個同名的 service,類型為 nodeport.

kubectl create service nodeport jerry-nginx-1982 --tcp 80:80
創建完成后,使用命令行 kubectl get svc 得到名稱為 jerry-nginx-1982 對外暴露的端口號:31954:

然后就能通過這個端口號訪問nginx server了:

那么這兩個同名的 pod 和 service 是如何關聯的呢?
首先打開 kubernetes dashboard,找到之前創建的 pod:

其明細為:jerry-nginx-1982-67cb658cb8-9hl99

再打開同名service:

再打開這個 service 里的 pod,發現就是我們前面找到的 jerry-nginx-1982-67cb658cb8-9hl99,說明 pod 和 service 是通過名稱關聯的。

我們可以做一個 negative 測試,直接創建一個名為 test 的 service,但不給它預先創建名為 test 的 pod:

kubectl create service nodeport test --tcp 80:80

service 創建成功后,打開這個 service,發現里面沒有分配任何 pod:

這個結果和我們預測的一致。

練習4 - 使用 Kubernetes 里的 job 計算圓周率后 2000 位

使用 Kubernetes 里的 job(作業),我們可以很方便地執行一些比較耗時的操作。
新建一個 job.ymal 文件:

定義了一個 Kubernetes job,名稱為 pi,類型為 job,容器名稱為 pi,鏡像為 perl,執行的 perl 命令為 print bpi(2000):

這個 ymal 文件的完整內容:

apiVersion: batch/v1 kind: Job metadata: name: pi spec: template: metadata: name: pi spec: containers: name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: Never

使用命令 kubectl create -f 導入這個 yaml 文件,創建一個新的 job:

之后在 Kubernetes 的 dashboard 里能看到這個新建的 job:

job 對應的 pod 狀態為 Waiting ContainerCreating:

稍后,其狀態從 Running 變為了 Terminated:Completed,總共花了 14 分鐘。

在 pod 的事件日志里,能看到大部分時間花在了 perl 鏡像的下載上:

點擊 dashboard 的 logs 按鈕,就能看到這個 2000 位圓周率的計算結果:

練習5 - Kubernetes 里的 ConfigMap 的用途

顧名思義,ConfigMap 用于保存配置數據的鍵值對,可以用來保存單個屬性,也可以用來保存配置文件。
ConfigMap 同 Kubernetes 的另一個概念 secret 類似,區別是 ConfigMap 主要用于保存不包含敏感信息的明文字符串。

創建方式:

kubectl create configmap special-config --from-literal=i042416=jerry

上述命令行創建了一個名為 special-config 的鍵值對,


key為 i042416, 值為 jerry

接下來我希望用這個 key 為 i042416 的值"jerry"來定義成 pod 里的一個環境變量。

下面是我的 yaml 文件:

apiVersion: v1 2 kind: Pod 3 metadata: 4 name: jerry-config-pod 5 spec: 6 containers: 7 - name: test-container 8 image: http://gcr.io/google_containers/busybox 9 command: [ "/bin/sh", "-c", "env" ] 10 env: 11 - name: JERRY_NAME 12 valueFrom: 13 configMapKeyRef: 14 name: special-config 15 key: i042416 16 restartPolicy: Never

可以看到第 15 行引用了我的 ConfigMap 的 key:i042416

下面使用 create -f 將該 yaml 文件導入,創建一個新的 pod:

創建之后,能在 pod 的明細頁面看到 configMap 的 key 已經作為環境變量顯示出來了:

因為我 yaml 文件里指定 pod 執行的 script 為 /bin/sh -c env, 因此最后會將容器里所有的環境變量都打印出來,我們定義在 ConfigMap 里的 i042416 的值 jerry 也被顯示了出來:

這種定義環境變量的做法和 SAP 云平臺 CloudFoundry 環境里定義環境變量的方式很類似。
CloudFoundry環境變量一覽表:

https://docs.run.pivotal.io/devguide/deploy-apps/environment-variable.html

  • CF_INSTANCE_ADDR
  • CF_INSTANCE_GUID
  • CF_INSTANCE_INDEX
  • CF_INSTANCE_IP
  • CF_INSTANCE_INTERNAL_IP
  • CF_INSTANCE_PORT
  • CF_INSTANCE_PORTS
  • DATABASE_URL
  • HOME
  • LANG
  • MEMORY_LIMIT
  • PORT
  • PWD
  • TMPDIR
  • USER
  • VCAP_APP_PORT
  • VCAP_APPLICATION
  • VCAP_SERVICES

當使用 cf push 命令將本地應用部署到 SAP 云平臺的 CloudFoundry 環境下時,某些環境變量會自動被系統寫入相應的值,這個行為同 ABAP 的 sy-sysid 自動被設置為當前系統 ID 具有一樣的邏輯。

比如 app router 會把用戶訪問請求重定向到 XSUAA 實例上。

app router 在 manifest.yml 里定義的 XSUAA 實例名稱為 xsuaa-jerry-demo,

在運行時這個 XSUAA 的 id 會被 SAP 云平臺自動寫入環境變量 VCAP_SERVICES 里:

總結

本文介紹了每一個 Kubernetes 從業者的實際工作中幾乎都會使用的步驟:創建 Deployment 和 Service,同時通過實際例子講解了 Pod 和 Service 綁定的實現方式,介紹了使用 Kubernetes Job 計算圓周率這種費時的操作,希望對 Kubernetes 初學者能有所幫助。

總結

以上是生活随笔為你收集整理的适合 Kubernetes 初学者的一些实战练习(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。