將 Kubernetes 與 Ansible 結(jié)合實(shí)現(xiàn)云端自動(dòng)化。此外,還可以參照我們的 Ansible 的 k8s 模塊速查表。
成都創(chuàng)新互聯(lián)公司長期為上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為中方企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè),中方網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。Ansible是實(shí)現(xiàn)自動(dòng)化工作的優(yōu)秀工具,而Kubernetes則是容器編排方面的利器,要是把兩者結(jié)合起來,會(huì)有怎樣的效果呢?正如你所猜測(cè)的,Ansible + Kubernetes 的確可以實(shí)現(xiàn)容器編排自動(dòng)化。
Ansible 模塊
實(shí)際上,Ansible 本身只是一個(gè)用于解釋 YAML 文件的框架。它真正強(qiáng)大之處在于它豐富的模塊,所謂模塊module,就是在 Ansible劇本playbook中讓你得以通過簡單配置就能調(diào)用外部應(yīng)用程序的一些工具。
Ansible 中有模塊可以直接操作 Kubernetes,也有對(duì)一些相關(guān)組件(例如Docker和Podman)實(shí)現(xiàn)操作的模塊。學(xué)習(xí)使用一個(gè)新模塊的過程和學(xué)習(xí)新的終端命令、API 一樣,可以先從文檔中了解這個(gè)模塊在調(diào)用的時(shí)候需要接受哪些參數(shù),以及這些參數(shù)在外部應(yīng)用程序中產(chǎn)生的具體作用。
訪問 Kubernetes 集群
在使用 Ansible Kubernetes 模塊之前,先要有能夠訪問 Kubernetes 集群的權(quán)限。在沒有權(quán)限的情況下,可以嘗試使用一個(gè)短期在線試用賬號(hào),但我們更推薦的是按照 Kubernetes 官網(wǎng)上的指引,或是參考 Braynt Son 《入門 Kubernetes》的教程安裝Minikube。Minikube 提供了一個(gè)單節(jié)點(diǎn) Kubernetes 實(shí)例的安裝過程,你可以像使用一個(gè)完整集群一樣對(duì)其進(jìn)行配置和交互。
下載Ansible k8s 速記表(需注冊(cè))
在安裝 Minikube 之前,你需要確保你的環(huán)境支持虛擬化并安裝libvirt,然后對(duì)libvirt用戶組授權(quán):
$ sudo dnf install libvirt$ sudo systemctl start libvirtd$ sudo usermod --append --groups libvirt `whoami`$ newgrp libvirt 安裝 Python 模塊
為了能夠在 Ansible 中使用 Kubernetes 相關(guān)的模塊,你需要安裝以下這些 Python 模塊:
$ pip3.6 install kubernetes --user$ pip3.6 install openshift --user 啟動(dòng) Kubernetes
如果你使用的是 Minikube 而不是完整的 Kubernetes 集群,請(qǐng)使用minikube命令在本地創(chuàng)建一個(gè)最精簡化的 Kubernetes 實(shí)例:
$ minikube start --driver=kvm2 --kvm-network default
然后等待 Minikube 完成初始化,這個(gè)過程所需的時(shí)間會(huì)因?qū)嶋H情況而異。
獲取集群信息
集群啟動(dòng)以后,通過cluster-info選項(xiàng)就可以獲取到集群相關(guān)信息了:
$ kubectl cluster-infoKubernetes master is running at https://192.168.39.190:8443KubeDNS is running at https://192.168.39.190:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxyTo further debug and diagnose cluster problems, use \'kubectl cluster-info dump\'. 使用 k8s 模塊
Ansible 使用k8s這個(gè)模塊來實(shí)現(xiàn)對(duì) Kubernetes 的操作,在劇本中使用k8s模塊就可以對(duì) Kuvernetes 對(duì)象進(jìn)行管理。這個(gè)模塊描述了kubectl命令的最終狀態(tài),例如對(duì)于以下這個(gè)使用kubectl創(chuàng)建新的命名空間的操作:
$ kubectl create namespace my-namespace
這是一個(gè)很簡單的操作,而對(duì)這個(gè)操作的最終狀態(tài)用 YAML 文件來描述是這樣的:
- hosts: localhost tasks: - name: create namespace k8s: name: my-namespace api_version: v1 kind: Namespace state: present
如果你使用的是 Minikube,那么主機(jī)名(hosts)應(yīng)該定義為localhost。需要注意的是,所使用的模塊也定義了可用參數(shù)的語法(例如api_version和kind參數(shù))。
在運(yùn)行這個(gè)劇本之前,先通過yamllint命令驗(yàn)證是否有錯(cuò)誤:
$ yamllint example.yaml
確保沒有錯(cuò)誤之后,運(yùn)行劇本:
$ ansible-playbook ./example.yaml
可以驗(yàn)證新的命名空間是否已經(jīng)被創(chuàng)建出來:
$ kubectl get namespacesNAME STATUS AGEdefault Active 37hkube-node-lease Active 37hkube-public Active 37hkube-system Active 37hdemo Active 11hmy-namespace Active 3s 使用 Podman 拉取容器鏡像
容器是個(gè) Linux 系統(tǒng),幾乎是最小化的,可以由 Kubernetes 管理。LXC 項(xiàng)目和 Docker 定義了大部分的容器規(guī)范。最近加入容器工具集的是 Podman,它不需要守護(hù)進(jìn)程就可以運(yùn)行,為此受到了很多用戶的歡迎。
通過 Podman 可以從 Docker Hub 或者Quay.io等存儲(chǔ)庫拉取容器鏡像。這一操作對(duì)應(yīng)的 Ansible 語法也很簡單,只需要將存儲(chǔ)庫網(wǎng)站提供的鏡像路徑寫在劇本中的相應(yīng)位置就可以了:
- name: pull an image podman_image: name: quay.io/jitesoft/nginx
使用yamllint驗(yàn)證:
$ yamllint example.yaml
運(yùn)行劇本:
$ ansible-playbook ./example.yaml[WARNING]: provided hosts list is empty, only localhost is available.Note that the implicit localhost does not match \'all\'PLAY [localhost] ************************TASK [Gathering Facts] ************************ok: [localhost]TASK [create k8s namespace] ************************ok: [localhost]TASK [pull an image] ************************changed: [localhost]PLAY RECAP ************************localhost: ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 使用 Ansible 實(shí)現(xiàn)部署
Ansible 除了可以執(zhí)行小型維護(hù)任務(wù)以外,還可以通過劇本實(shí)現(xiàn)其它由kubectl實(shí)現(xiàn)的功能,因?yàn)閮烧叩?YAML 文件之間只有少量的差異。在 Kubernetes 中使用的 YAML 文件只需要稍加改動(dòng),就可以在 Ansible 劇本中使用。例如下面這個(gè)用于使用kubectl命令部署 Web 服務(wù)器的 YAML 文件:
apiVersion: apps/v1kind: Deploymentmetadata: name: my-webserverspec: selector: matchLabels: run: my-webserver replicas: 1 template: metadata: labels: run: my-webserver spec: containers: - name: my-webserver image: nginx ports: - containerPort: 80
如果你對(duì)其中的參數(shù)比較熟悉,你只要把 YAML 文件中的大部分內(nèi)容放到劇本中的definition部分,就可以在 Ansible 中使用了:
- name: deploy a web server k8s: api_version: v1 namespace: my-namespace definition: kind: Deployment metadata: labels: app: nginx name: nginx-deploy spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: my-webserver image: quay.io/jitesoft/nginx ports: - containerPort: 80 protocol: TCP
執(zhí)行完成后,使用kubectl命令可以看到預(yù)期中的的部署deployment:
$ kubectl -n my-namespace get podsNAME READY STATUSnginx-deploy-7fdc9-t9wc2 1/1 Running 在云上使用模塊
隨著現(xiàn)在越來越多的開發(fā)和部署工作往云上轉(zhuǎn)移的趨勢(shì),我們必須了解如何在云上實(shí)現(xiàn)自動(dòng)化。其中k8s和podman_image這兩個(gè)模塊只是云開發(fā)中的其中一小部分。你可以在你的工作流程中尋找一些需要自動(dòng)化的任務(wù),并學(xué)習(xí)如何使用 Ansible 讓你在這些任務(wù)上事半功倍。
網(wǎng)站名稱:使用Ansible的Kubernetes模塊實(shí)現(xiàn)容器編排自動(dòng)化
網(wǎng)頁網(wǎng)址:http://muchs.cn/article38/cghesp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、Google、微信公眾號(hào)、面包屑導(dǎo)航、網(wǎng)站導(dǎo)航、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)