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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

本系列的前兩篇文章:

  • 適合 Kubernetes 初學(xué)者的一些實(shí)戰(zhàn)練習(xí) (一)
  • 適合 Kubernetes 初學(xué)者的一些實(shí)戰(zhàn)練習(xí) (二)

我們已經(jīng)完成了下列在 Kubernetes 中的練習(xí):

  • 如何在 Kubernetes 里創(chuàng)建一個(gè) Nginx 應(yīng)用
  • 如何在 Kubernetes 里創(chuàng)建一個(gè) Nginx Service
  • Kubenetes 里 Pod 和 Service 綁定的實(shí)現(xiàn)方式
  • 使用 Kubernetes 里的 job 計(jì)算圓周率后 2000 位
  • Kubernetes 里的 ConfigMap 的用途
  • 使用腳本在 Linux 服務(wù)器上自動(dòng)安裝 Kubernetes 的包管理器 Helm
  • 一個(gè)簡單的例子理解 Kubernetes 的三種 IP 地址類型
  • 使用 describe 命令進(jìn)行 Kubernetes pod 錯(cuò)誤排查

本文繼續(xù)通過實(shí)戰(zhàn)來學(xué)習(xí) Kubernetes 相關(guān)知識(shí)。

練習(xí)1:通過 describe 命令學(xué)習(xí) Kubernetes 的 pod 詳細(xì)屬性

我們可以首先使用 kubectl get pods 命令得到 pod 列表,比如我們想研究 pod nginx-storage-pod 的明細(xì):

使用命令 kubectl describe pod nginx-storage-pod > nginx-storage-pod.yaml, 將 describe 命令的輸出重定向到一個(gè) yaml 文件里。用 vi 打開這個(gè) yaml 文件:

pod 的所有屬性可以從這個(gè) yaml 文件里學(xué)習(xí):

node:shoot–k8s-train–shacw46-worker-prvfv-z1-7844dc6744-ghd5m/10.250.0.6
表明 pod 所在的 node,這個(gè) node 一定是命令 kubectl get node 返回的結(jié)果之一:

Image:代表該 pod 是基于哪一個(gè) docker image 創(chuàng)建的。

Mount:該 pod 使用的 persistent volume 對應(yīng)的物理文件目錄,我的例子是 usr/share/nginx/html:

這個(gè)路徑從哪里來的呢?就是我的 pod 文件的 yaml 文件里的定義:

describe命令除了本文介紹的可以用來深入學(xué)習(xí) pod 的屬性外,還可以用于 pod 不能正常啟動(dòng)時(shí)的錯(cuò)誤排查。

比如我有一個(gè) pod 名為 another3,狀態(tài)一直處于 CrashLoopBackOff, RESTART 次數(shù)為12:

使用 kubectl describe pod another3 就可以看到這個(gè)容器啟動(dòng)的明細(xì):

Back-off restarting failed container

仔細(xì)檢查 pod 的 yaml 文件,發(fā)現(xiàn)原因是因?yàn)槲叶x了 volume 的 name 為 content-storage,但是沒有指定 persistentvolumeclaim.

當(dāng)我把 volumes: - name: content-storage 刪除之后,

下圖是修改后的 yaml 文件:

重新創(chuàng)建名為 another3 的 pod,很快就創(chuàng)建成功并且狀態(tài)處于 running 了:

練習(xí)2 - 使用 Gardener 在 Google Cloud Platform 上創(chuàng)建 Kubernetes 集群

Gardener是一個(gè)開源項(xiàng)目,github 地址在這里.

使用 Gardener,我們可以在幾分鐘之內(nèi)在 GCP, AWS, Azure 或者 Openstack 上輕松創(chuàng)建Kubernetes Cluster.

點(diǎn)擊新建按鈕創(chuàng)建一個(gè) Cluster,這里 Infrastructure 我選擇的是 gcp:

創(chuàng)建成功后,狀態(tài)變?yōu)?Ready,表明該集群已經(jīng)可用了。

點(diǎn)擊集群名稱 jerrycls,進(jìn)入集群明細(xì)頁面,在 Access 標(biāo)簽頁下面獲得這個(gè)集群的用戶名admin 和密碼。

點(diǎn)擊 dashboard 超鏈接,會(huì)彈出輸入用戶米和密碼的提示。用戶名輸入 admin,密碼從上面 Access 標(biāo)簽頁獲取。即可進(jìn)入集群的管理頁面。

從左下角處查看這個(gè)集群的三個(gè) namespace:default,kube-public 和 kube-system:

這是 Gardener 自動(dòng)為我分配的工作節(jié)點(diǎn):

點(diǎn)擊 kubeconfig,獲得這個(gè)集群的 config yaml 文件,把它的內(nèi)容復(fù)制下來:

我使用的操作系統(tǒng)是 ubuntu,上面安裝了 kubectl.
進(jìn)入目錄 /home/vagrant/.kube, 用 vi 編輯 config 文件:

把從 Gardener 里拷貝的內(nèi)容粘貼到 config 文件里。

現(xiàn)在使用 kubectl get ns,就可以看到 Kubernetes cluster 上的三個(gè) namespace,和我們前面在 dashboard 里觀察到的一致。

使用 kubectl get node -o wide, 看到一個(gè)工作節(jié)點(diǎn),和之前在 Kubernetes dashboard 里觀察到的一致。

使用命令 kubectl run nginx --image=nginx:1.12.2 創(chuàng)建一個(gè) deployment,運(yùn)行 nginx container:


創(chuàng)建好 deployment 之后,使用命令行創(chuàng)建一個(gè) service,把 nginx 服務(wù)暴露給外部:

kubectl expose deployment nginx --type=loadBalancer --port=80 --target-port=80

使用 kubectl get svc 查看生成的 service,供外部訪問的 IP 地址從 EXTERNAL-IP 處獲得:35.233.45.209:

在瀏覽器里直接訪問這個(gè) ip 地址,看到 nginx 默認(rèn)的首頁,說明部署在 Google Cloud Platform 上的 Kubernetes cluster 能夠正常工作了。

練習(xí)3 - 如何使用 Kubernetes 的 configmap 通過環(huán)境變量注入到 pod 里

在 Kubernetes 官網(wǎng)里,提到了 Kubernetes 里的一個(gè)最佳實(shí)踐就是把應(yīng)用代碼同配置信息分開,一種方式就是使用 Kubernetes 1.2 里引入的 configmap 概念。

configmap實(shí)際上就是一系列鍵值對,存儲(chǔ)于 etcd 里。etcd 的官網(wǎng)有這樣一句話:

etcd is a distributed key-value store designed to reliably and quickly preserve and provide access to critical data.

etcd 是一個(gè)高性能的分布式鍵值對存儲(chǔ)庫,用于存儲(chǔ)和訪問關(guān)鍵數(shù)據(jù)。

使用下面的命令行創(chuàng)建一個(gè) Kubernetes config map:

kubectl create configmap test-config --from-literal=test.type=unit --from-literal=test.exec=always

創(chuàng)建一個(gè)名為 test-config 的鍵值對,key 為 test.type,值為 unit,key 為 test.exec, 值為 always。

下面我打算創(chuàng)建一個(gè) pod,消費(fèi)這個(gè)名為 test-config 的 configmap.

創(chuàng)建一個(gè)內(nèi)容如下的 yaml 文件:

apiVersion: v1kind: Podmetadata:name: test-configmapspec:containers:- name: test-containerimage: alpine:3.8command: [ "/bin/sh", "-c", "env" ]env:- name: TEST_TYPEvalueFrom:configMapKeyRef:name: test-configkey: test.type- name: TEST_EXECvalueFrom:configMapKeyRef:name: test-configkey: test.execrestartPolicy: Never

這個(gè) yaml 文件定義的 pod 基于 docker 鏡像 alpine,執(zhí)行 shell 命令 /bin/sh -c env 查看環(huán)境變量。

在 env 區(qū)域,我給該 pod 注入一個(gè)名為 TEST_TYPE 的環(huán)境變量,值從 configMap 鍵值對的鍵名稱為 test.type 的值中取。

kubectl create -f 創(chuàng)建這個(gè) pod:

使用命令 kubectl logs test-configmap 查看這個(gè) pod 運(yùn)行生成的日志,發(fā)現(xiàn)輸出的環(huán)境變量列表中,出現(xiàn)了 TEST_TYPE=unit,這個(gè) TEST_TYPE 是我在 yaml 文件里注入的環(huán)境變量名稱,而 unit 就來自 configmap 里 test-config 的值 unit。

總結(jié)

本文作為該系列的第三篇文章,首先學(xué)習(xí)了如何使用 describe 這個(gè)常用命令來深入學(xué)習(xí) pod 的屬性和一些常見故障的排查工作,接著通過 ConfigMap 使用方法的學(xué)習(xí),了解了 Kubernetes 世界里應(yīng)用代碼同配置信息相分離的這一最佳實(shí)踐,最后學(xué)習(xí)了使用開源項(xiàng)目 Gardener 在云平臺(tái)上創(chuàng)建 Kubernetes 集群的步驟,希望對大家有所幫助。

本系列前兩篇文章包含的練習(xí),請參閱之前的文章:

本系列的前兩篇文章:

  • 適合 Kubernetes 初學(xué)者的一些實(shí)戰(zhàn)練習(xí) (一)
  • 適合 Kubernetes 初學(xué)者的一些實(shí)戰(zhàn)練習(xí) (二)
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。