幫助你駕馭 Kubernetes 的 4 個工具
在本系列的第三篇文章中,Kubernetes 基礎:首先學習如何使用,我強調你應該學會使用 Kubernetes,而不是建造它。我還解釋說,在 Kubernetes 中,你必須學習最小的一組原語來建模應用程序。我想強調這一點:你需要學習的這組原語是最簡單的原語集,你可以通過它們學習如何實現生產級的應用程序部署(即高可用性 [HA]、多容器、多應用程序)。換句話說,學習 Kubernetes 內置的原語集比學習集群軟體、集群文件系統、負載平衡器、讓人發瘋的 Apache 和 Nginx 的配置、路由器、交換機、防火牆和存儲後端更容易 —— 這些是你在傳統的 IT 環境(虛擬機或裸機)中建模簡單的 HA 應用程序所需要的東西。
在這第四篇文章中,我將分享一些有助於你學習快速駕馭 Kubernetes 的工具。
1、Katacoda
無疑,Katacoda 是試駕 Kubernetes 集群的最簡單方法。只需單擊一下,五秒鐘後就可以將基於 Web 的終端直接連接到正在運行的 Kubernetes 集群中。這對於使用和學習來說非常棒。我甚至將它用於演示和測試新想法。Katacoda 提供了一個完整的臨時環境,在你使用完畢後可以回收利用。
![OpenShift Playground](/data/attachment/album/201907/15/122053tz76pb1avpfpq6bb.png "OpenShift Playground")
![Kubernetes Playground](/data/attachment/album/201907/15/122054hal8g72papgllno4.png "Kubernetes Playground")
Katacoda 提供了一個臨時的環境和更深入的實驗室環境。例如,我最近三四年主講的 Linux Container Internals Lab 是在 Katacoda 中構建的。
Katacoda 在其主站點上維護了若干 Kubernetes 和雲教程並與 Red Hat 合作以支持了一個 OpenShift 的專用學習門戶。了解一下,它們是極好的學習資源。
當你第一次學習駕駛翻斗車時,最好先觀察一下其他人的駕駛方式。
2、Podman generate kube
podman generate kube
命令是一個很棒的子命令,可以幫助用戶自然地從運行簡單容器的簡單容器引擎轉換到運行許多容器的集群用例(正如我在上篇文章中所描述的那樣)。Podman 通過讓你啟動一個新的容器,然後導出這個可工作的 Kube YAML,並在 Kubernetes 中啟動它來實現這一點。看看這個(你可以在 Katacoda lab 中運行它,它已經有了 Podman 和 OpenShift)。
首先,請注意運行容器的語法與 Docker 非常相似:
podman run -dtn two-pizza quay.io/fatherlinux/two-pizza
不過這個是其它容器引擎所沒有的:
podman generate kube two-pizza
輸出:
# Generation of Kubernetes YAML is still under development!
#
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-1.3.1
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2019-06-07T08:08:12Z"
labels:
app: two-pizza
name: two-pizza
spec:
containers:
- command:
- /bin/sh
- -c
- bash -c 'while true; do /usr/bin/nc -l -p 3306 < /srv/hello.txt; done'
env:
- name: PATH
value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- name: TERM
value: xterm
- name: HOSTNAME
- name: container
value: oci
image: quay.io/fatherlinux/two-pizza:latest
name: two-pizza
resources: {}
securityContext:
allowPrivilegeEscalation: true
capabilities: {}
privileged: false
readOnlyRootFilesystem: false
tty: true
workingDir: /
status: {}
apiVersion: v1
kind: Service
metadata:
creationTimestamp: "2019-06-07T08:08:12Z"
labels:
app: two-pizza
name: two-pizza
spec:
selector:
app: two-pizza
type: NodePort
status:
loadBalancer: {}
你現在有了一些可以的工作 Kubernetes YAML,你可以用它作為練習的起點來學習、調整等等。-s
標誌可以為你創造一項服務。Brent Baude 甚至致力於添加卷/持久卷斷言等新功能。如果想進一步深入,請在 Brent 的博客文章《Podman 現在可以輕鬆過渡到 Kubernetes 和 CRI-O》中了解他的工作。
3、oc new-app
oc new-app
命令非常強大。它是特定於 OpenShift 的,所以它在默認的 Kubernetes 中不可用,但是當你開始學習 Kubernetes 時它非常有用。讓我們從快速命令開始創建一個相當複雜的應用程序:
oc new-project -n example
oc new-app -f https://raw.githubusercontent.com/openshift/origin/master/examples/quickstarts/cakephp-mysql.json
使用 oc new-app
,你可以從 OpenShift 開發人員那裡偷取模板,並在開發原語來描述你自己的應用程序時擁有一個已知良好的起點。運行上述命令後,你的 Kubernetes 命名空間(在 OpenShift 中)將由若干新的已定義資源填充。
oc get all
輸出:
NAME READY STATUS RESTARTS AGE
pod/cakephp-mysql-example-1-build 0/1 Completed 0 4m
pod/cakephp-mysql-example-1-gz65l 1/1 Running 0 1m
pod/mysql-1-nkhqn 1/1 Running 0 4m
NAME DESIRED CURRENT READY AGE
replicationcontroller/cakephp-mysql-example-1 1 1 1 1m
replicationcontroller/mysql-1 1 1 1 4m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/cakephp-mysql-example ClusterIP 172.30.234.135 <none> 8080/TCP 4m
service/mysql ClusterIP 172.30.13.195 <none> 3306/TCP 4m
NAME REVISION DESIRED CURRENT TRIGGERED BY
deploymentconfig.apps.openshift.io/cakephp-mysql-example 1 1 1 config,image(cakephp-mysql-example:latest)
deploymentconfig.apps.openshift.io/mysql 1 1 1 config,image(mysql:5.7)
NAME TYPE FROM LATEST
buildconfig.build.openshift.io/cakephp-mysql-example Source Git 1
NAME TYPE FROM STATUS STARTED DURATION
build.build.openshift.io/cakephp-mysql-example-1 Source Git@47a951e Complete 4 minutes ago 2m27s
NAME DOCKER REPO TAGS UPDATED
imagestream.image.openshift.io/cakephp-mysql-example docker-registry.default.svc:5000/example/cakephp-mysql-example latest About aminute ago
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
route.route.openshift.io/cakephp-mysql-example cakephp-mysql-example-example.2886795271-80-rhsummit1.environments.katacoda.com cakephp-mysql-example <all> None
這樣做的好處是你可以刪除 Pod,觀察複製控制器如何重新創建它們,縮放 Pod 等等。你可以使用模板並將其更改為其他應用程序(這是我第一次啟動時所做的)。
4、Visual Studio Code
我把我最喜歡的放在最後。我的大部分工作都使用 vi,但我從來沒有為 Kubernetes 找到一個好的語法高亮器和代碼補完插件(如果有的話,請告訴我)。相反,我發現微軟的 VS Code 有一套殺手級的插件,可以完成 Kubernetes 資源的創建並提供樣板。
![VS Code plugins UI](/data/attachment/album/201907/15/122055gex5smsd2s9gr79b.png "VS Code plugins UI")
首先,安裝上圖中顯示的 Kubernetes 和 YAML 插件。
![Autocomplete in VS Code](/data/attachment/album/201907/15/122056hk2pn3m2ddpms1rr.png "Autocomplete in VS Code")
然後,你可以從頭開始創建新的 YAML 文件,並自動補完 Kubernetes 資源。上面的示例顯示了一個服務。
![VS Code autocomplete filling in boilerplate for an object](/data/attachment/album/201907/15/122057sm8ufuwvlhavja7f.png "VS Code autocomplete filling in boilerplate for an object")
當你使用自動補完並選擇服務資源時,它會填充該對象的一些模板。當你第一次學習使用 Kubernetes 時,這非常棒。你可以構建 Pod、服務、複製控制器、部署等。當你從頭開始構建這些文件甚至修改你使用 podman generate kube
創建的文件時,這是一個非常好的功能。
總結
這四個工具(如果算上兩個插件,則為六個)將幫助你學習駕馭 Kubernetes,而不是構造或裝備它。在本系列的最後一篇文章中,我將討論為什麼 Kubernetes 如此適合運行這麼多不同的工作負載。
via: https://opensource.com/article/19/6/tools-drive-kubernetes
作者:Scott McCarty 選題:lujun9972 譯者:wxy 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive