學習如何駕馭 Kubernetes 好比何建造它更重要,這些工具能夠幫助你更快上路。php
在本系列的第三篇文章中,Kubernetes 基礎:首先學習如何使用,我強調你應該學會使用 Kubernetes,而不是建造它。我還解釋說,在 Kubernetes 中,你必須學習最小的一組原語來建模應用程序。我想強調這一點:你須要學習的這組原語是最簡單的原語集,你能夠經過它們學習如何實現生產級的應用程序部署(即高可用性 [HA]、多容器、多應用程序)。換句話說,學習 Kubernetes 內置的原語集比學習集羣軟件、集羣文件系統、負載平衡器、讓人發瘋的 Apache 和 Nginx 的配置、路由器、交換機、防火牆和存儲後端更容易 —— 這些是你在傳統的 IT 環境(虛擬機或裸機)中建模簡單的 HA 應用程序所須要的東西。html
在這第四篇文章中,我將分享一些有助於你學習快速駕馭 Kubernetes 的工具。mysql
無疑,Katacoda 是試駕 Kubernetes 集羣的最簡單方法。只需單擊一下,五秒鐘後就能夠將基於 Web 的終端直接鏈接到正在運行的 Kubernetes 集羣中。這對於使用和學習來講很是棒。我甚至將它用於演示和測試新想法。Katacoda 提供了一個完整的臨時環境,在你使用完畢後能夠回收利用。linux
Kubernetes Playgroundgithub
Katacoda 提供了一個臨時的環境和更深刻的實驗室環境。例如,我最近三四年主講的 Linux Container Internals Lab 是在 Katacoda 中構建的。sql
Katacoda 在其主站點上維護了若干 Kubernetes 和雲教程並與 Red Hat 合做以支持了一個 OpenShift 的專用學習門戶。瞭解一下,它們是極好的學習資源。docker
當你第一次學習駕駛翻斗車時,最好先觀察一下其餘人的駕駛方式。json
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》中瞭解他的工做。
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 等等。你可使用模板並將其更改成其餘應用程序(這是我第一次啓動時所作的)。
我把我最喜歡的放在最後。個人大部分工做都使用 vi,但我歷來沒有爲 Kubernetes 找到一個好的語法高亮器和代碼補完插件(若是有的話,請告訴我)。相反,我發現微軟的 VS Code 有一套殺手級的插件,能夠完成 Kubernetes 資源的建立並提供樣板。
首先,安裝上圖中顯示的 Kubernetes 和 YAML 插件。
而後,你能夠從頭開始建立新的 YAML 文件,並自動補完 Kubernetes 資源。上面的示例顯示了一個服務。
當你使用自動補完並選擇服務資源時,它會填充該對象的一些模板。當你第一次學習使用 Kubernetes 時,這很是棒。你能夠構建 Pod、服務、複製控制器、部署等。當你從頭開始構建這些文件甚至修改你使用 podman generate kube
建立的文件時,這是一個很是好的功能。
這四個工具(若是算上兩個插件,則爲六個)將幫助你學習駕馭 Kubernetes,而不是構造或裝備它。在本系列的最後一篇文章中,我將討論爲何 Kubernetes 如此適合運行這麼多不一樣的工做負載。
via: opensource.com/article/19/…
做者:Scott McCarty 選題:lujun9972 譯者:wxy 校對:wxy