成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

使用Ansible管理Kubernetes資源

前兩天,一篇「Think twice before using Helm[1]」(譯文:「恕我直言,對(duì)Helm大家還是要三思而后用」) 引起了大家的關(guān)注。作者從認(rèn)證,生命周期管理,錯(cuò)誤處理等多個(gè)角度說明了 Helm 自身的問題。我基本贊同作者的觀點(diǎn)。多數(shù)情況下我們只是把 helm 當(dāng)做一個(gè)模板引擎在使用,把 charts 生成 Kubernetes 可以處理的格式。但是從使用角度來說,這個(gè)模板實(shí)現(xiàn)的太重了。有興趣的可以去讀讀原文。

成都網(wǎng)絡(luò)公司-成都網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司十多年經(jīng)驗(yàn)成就非凡,專業(yè)從事網(wǎng)站制作、成都做網(wǎng)站,成都網(wǎng)頁設(shè)計(jì),成都網(wǎng)頁制作,軟文營銷廣告投放等。十多年來已成功提供全面的成都網(wǎng)站建設(shè)方案,打造行業(yè)特色的成都網(wǎng)站建設(shè)案例,建站熱線:13518219792,我們期待您的來電!

那如果 Helm 不輕量好用的話,我們有啥其他選擇?

Ansible 做為部署管理的工具,正在受到越來越多的運(yùn)維人員的追捧。他支持 Jinja2 的模板引擎,而且是無代理節(jié)點(diǎn)的架構(gòu),很方便來做一些模板工作。所以本文來介紹使用 Ansible 如何管理 Kubernetes 上面的資源。

首先使用 Ansible 避免不了使用其模塊。與 Kubernetes 相關(guān)的模塊可以從[2]找到?,F(xiàn)在主要有k8s, k8s_facts, k8s_scale, kubernetes和oc 5個(gè)模塊。其中 kubernetes 和 oc 模塊因?yàn)閷?shí)現(xiàn)邏輯不好用,在 ansible 2.6 版本中已經(jīng)廢棄掉, 推薦使用前三個(gè)。其中,k8s_scale 來自 ansible 2.5, k8s 來自 ansible 2.6, k8s_facts 來自 ansible 2.7。使用這三個(gè)模塊的話,還需要安裝 openshift 的 Python 包。以下代碼全部基于 ansible 2.7 版本。

一、k8s 模塊

管理 kubernetes 各種資源的話,使用 k8s 模塊就可以了,如下是創(chuàng)建 namespace 的寫法

  • name: Create a k8s namespace
    k8s:
    name: testing
    api_version: v1
    kind: Namespace
    state: present
    如果要?jiǎng)?chuàng)建一個(gè) Service, 也可以使用如下面的寫法。

  • name: Create a Service object from an inline definition
    k8s:
    state: present
    definition:
    apiVersion: v1
    kind: Service
    metadata:
    name: web
    namespace: testing
    labels:
    app: galaxy
    service: web
    spec:
    selector:
    app: galaxy
    service: web
    ports:
    • protocol: TCP
      targetPort: 8000
      name: port-8000-tcp
      port: 8000
      可以看到 definition 里面就是原生的 Kubernetes 里面的寫法,而 k8s 模塊的參數(shù)也寫少,所以上手會(huì)很快。

如果 k8s 模塊和 ansible lookup 插件合用的話,可以寫出更加簡潔的代碼,如下

#tasks.yml

  • name: Create a Service object from an external file
    var:
    name: "web"
    k8s:
    state: present
    definition:
    {{ lookup('template', '/path/to/service.yml') | to_yaml(indent=6) }}
    #/path/to/service.yml

    apiVersion: v1
    kind: Service
    metadata:
    name: {{ name }} # <-- 這里可以使用變量
    namespace: testing
    labels:
    app: galaxy
    service: web
    spec:
    selector:
    app: galaxy
    service: web
    ports:

    • protocol: TCP
      targetPort: 8000
      name: port-8000-tcp
      port: 8000
      可以看到 Kubernetes service 文件可以完全從 task 里面獨(dú)立出來,獨(dú)立后的寫法就是原生的 kubernetes 的格式,基本就和 Charts 的結(jié)構(gòu)差不多了。

基于此,完全可以使用這種方式替換掉 helm 的模板功能,而且沒有引入任何額外的依賴,就是直接的 ansible 生成相關(guān)文件,丟給 kubernetes api 來處理。等部署完成后,我們也可以脫離 Ansible 繼續(xù)通過 kubelet 命令維護(hù)這些資源。也正是由于這么簡潔的實(shí)現(xiàn),k8s 模塊可以管理 Kubernetes 和 OpenShift, 也可以管理各種 CRD 資源。

相比于 helm , 這種方法的缺點(diǎn)在于 YAML 文件都要自己寫,沒有社區(qū)在維護(hù)的 Charts。不像 helm 那樣,一個(gè)命令就可以把服務(wù)都安裝上。前期的工作還是挺多的。但是從另外一個(gè)角度來說,社區(qū)維護(hù)的 Charts 做一些 Demo 還可以,真要生產(chǎn)上面使用,還是要做大量工作的。所以從這個(gè)角度上講,使用 Ansible 也沒有帶來太大的工作量。

我更期待社區(qū)可以使用 Ansible 直接管理 Charts 資源,或可以有一個(gè)工具把 Charts 的 Go 模板轉(zhuǎn)成 Ansible 可以接受的 Jinja2 格式。

二、k8s_scale 和 k8s_facts 模塊

這兩個(gè)模塊算輔助的功能,我覺得使用的機(jī)會(huì)可能并不會(huì)太多。k8s_scale 的例子如下:

  • name: Scale deployment up, and extend timeout
    k8s_scale:
    api_version: v1
    kind: Deployment
    name: elastic
    namespace: myproject
    replicas: 3
    wait_timeout: 60

  • name: Scale deployment down when current replicas match
    k8s_scale:
    api_version: v1
    kind: Deployment
    name: elastic
    namespace: myproject
    current_replicas: 3
    replicas: 2
    它可以動(dòng)態(tài)調(diào)整 Deployment 的 replicas 個(gè)數(shù),基本上等同于kubectl scale 命令,但是這個(gè)功能基本可以使用 k8s 模塊通過改變 replicas 參數(shù)來調(diào)整。

k8s_facts的例子如下:

  • name: Get an existing Service object
    k8s_facts:
    api_version: v1
    kind: Service
    name: web
    namespace: testing
    register: web_service
    使用他,你可以檢查某個(gè)資源是否存在,如果存在的話,還可以獲得這個(gè)資源的yaml 文件描述,我覺得在 Ansible 流程控制中會(huì)有一些作用,可以根據(jù)當(dāng)前 Kubernets 里面資源情況,有選擇的做一些動(dòng)作。

三、小技巧

因?yàn)?Ansible 是 Python 編寫的,在使用 pip 安裝時(shí)容易破壞系統(tǒng)已經(jīng)安裝的 Python 包,推薦使用虛擬環(huán)境來安裝。

#mkvirtualenv --system-site-packages ansible
#pip install 'ansible<2.7' openshift

使用時(shí),需要指定 Ansible 使用的 python interpreter 變量

#workon ansible
#ansible-playbook -i localhost, -c local test.yml -e ansible_python_interpreter=${VIRTUAL_ENV}/bin/python

四、demo

以下是使用 ansible 在 OpenShift 上面部署 echoserver 的一個(gè)完整例子


  • hosts: localhost
    connection: local
    gather_facts: false
    vars:
    namespace: demo
    tasks:
    • name: Create echo server deployment config
      k8s:
      namespace: "{{ namespace }}"
      definition:
      apiVersion: v1
      kind: DeploymentConfig
      metadata:
      name: echoserver
      spec:
      replicas: 1
      template:
      metadata:
      labels:
      app: echoserver
      spec:
      containers:
      • name: echoserver
        image: googlecontainer/echoserver:1.5
        readnessProbe:
        httpGet:
        port: 8080
        path: /
        initialDelaySeconds: 20
        periodSeconds: 5
        livenessProbe:
        httpGet:
        port: 8080
        path: /
        initialDelaySeconds: 10
        periodSeconds: 3
    • name: Create echo server service
      k8s:
      namespace: "{{ namespace }}"
      definition:
      apiVersion: v1
      kind: Service
      metadata:
      name: echoserver
      spec:
      ports:
      • name: http
        port: 8080
        targetPort: 8080
        selector:
        app: echoserver
    • name: Create echo server router
      k8s:
      namespace: "{{ namespace }}"
      definition:
      kind: Route
      apiVersion: route.openshift.io/v1
      metadata:
      name: echoserver
      spec:
      host: echoserver.local
      to:
      kind: Service
      name: echoserver
      port:
      targetPort: http

參考文獻(xiàn):

[1]https://medium.com/virtuslab/think-twice-before-using-helm-25fbb18bc822;
[2]https://docs.ansible.com/ansible/latest/modules/list_of_clustering_modules.html;

網(wǎng)頁名稱:使用Ansible管理Kubernetes資源
路徑分享:http://jinyejixie.com/article30/posspo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、網(wǎng)站制作網(wǎng)站內(nèi)鏈、靜態(tài)網(wǎng)站全網(wǎng)營銷推廣、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)
尼勒克县| 尼木县| 和硕县| 五河县| 德阳市| 囊谦县| 台州市| 恩施市| 云龙县| 西宁市| 清徐县| 阿合奇县| 阜南县| 长丰县| 阿拉善盟| 巴彦淖尔市| 吴旗县| 昔阳县| 东宁县| 东阳市| 平塘县| 禹州市| 玉门市| 尤溪县| 同德县| 安溪县| 浪卡子县| 成武县| 遵化市| 沙洋县| 日喀则市| 科尔| 定南县| 夏河县| 页游| 霍林郭勒市| 德化县| 梅河口市| 蒙阴县| 原阳县| 隆安县|