使用Ansible的Kubernetes模块实现容器编排自动化

使用Ansible的Kubernetes模块实现容器编排自动化

作者:Seth Kenlon 2020-10-29 10:17:24

云计算

系统

自动化 将 Kubernetes 与 Ansible 结合实现云端自动化。此外,还可以参照我们的 Ansible 的 k8s 模块速查表。

[[349188]]

将 Kubernetes 与 Ansible 结合实现云端自动化。此外,还可以参照我们的 Ansible 的 k8s 模块速查表。

Ansible 是实现自动化工作的优秀工具,而 Kubernetes 则是容器编排方面的利器,要是把两者结合起来,会有怎样的效果呢?正如你所猜测的,Ansible + Kubernetes 的确可以实现容器编排自动化。

Ansible 模块

实际上,Ansible 本身只是一个用于解释 YAML 文件的框架。它真正强大之处在于它丰富的模块,所谓模块module,就是在 Ansible 剧本playbook 中让你得以通过简单配置就能调用外部应用程序的一些工具。

Ansible 中有模块可以直接操作 Kubernetes,也有对一些相关组件(例如 Docker 和 Podman)实现操作的模块。学习使用一个新模块的过程和学习新的终端命令、API 一样,可以先从文档中了解这个模块在调用的时候需要接受哪些参数,以及这些参数在外部应用程序中产生的具体作用。

访问 Kubernetes 集群

在使用 Ansible Kubernetes 模块之前,先要有能够访问 Kubernetes 集群的权限。在没有权限的情况下,可以尝试使用一个短期在线试用账号,但我们更推荐的是按照 Kubernetes 官网上的指引,或是参考 Braynt Son 《入门 Kubernetes》的教程安装 Minikube。Minikube 提供了一个单节点 Kubernetes 实例的安装过程,你可以像使用一个完整集群一样对其进行配置和交互。

  • 下载 Ansible k8s 速记表(需注册)

在安装 Minikube 之前,你需要确保你的环境支持虚拟化并安装 libvirt,然后对 libvirt 用户组授权:

  1. $ sudo dnf install libvirt
  2. $ sudosystemctl start libvirtd
  3. $ sudousermod--append --groups libvirt `whoami`
  4. $ newgrp libvirt

安装 Python 模块

为了能够在 Ansible 中使用 Kubernetes 相关的模块,你需要安装以下这些 Python 模块:

  1. $ pip3.6 install kubernetes --user
  2. $ pip3.6 install openshift --user

启动 Kubernetes

如果你使用的是 Minikube 而不是完整的 Kubernetes 集群,请使用 minikube 命令在本地创建一个最精简化的 Kubernetes 实例:

  1. $ minikube start --driver=kvm2 --kvm-network default

然后等待 Minikube 完成初始化,这个过程所需的时间会因实际情况而异。

获取集群信息

集群启动以后,通过 cluster-info 选项就可以获取到集群相关信息了:

  1. $ kubectl cluster-info
  2. Kubernetes master is running at https://192.168.39.190:8443
  3. KubeDNSis running at https://192.168.39.190:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
  4.  
  5. To further debug and diagnose cluster problems,use'kubectl cluster-info dump'.

使用 k8s 模块

Ansible 使用 k8s 这个模块来实现对 Kubernetes 的操作,在剧本中使用 k8s 模块就可以对 Kuvernetes 对象进行管理。这个模块描述了 kubectl 命令的最终状态,例如对于以下这个使用 kubectl 创建新的命名空间的操作:

  1. $ kubectl create namespacemy-namespace

这是一个很简单的操作,而对这个操作的最终状态用 YAML 文件来描述是这样的:

  1. - hosts: localhost
  2.   tasks:
  3.     - name: create namespace
  4.       k8s:
  5.         name:my-namespace
  6.         api_version: v1
  7.         kind:Namespace
  8.         state: present

如果你使用的是 Minikube,那么主机名(hosts)应该定义为 localhost。需要注意的是,所使用的模块也定义了可用参数的语法(例如 api_version 和 kind 参数)。

在运行这个剧本之前,先通过 yamllint 命令验证是否有错误:

  1. $ yamllint example.yaml

确保没有错误之后,运行剧本:

  1. $ ansible-playbook ./example.yaml

可以验证新的命名空间是否已经被创建出来:

  1. $ kubectl get namespaces
  2. NAME              STATUS   AGE
  3. default           Active   37h
  4. kube-node-lease   Active   37h
  5. kube-public       Active   37h
  6. kube-system       Active   37h
  7. demo              Active   11h
  8. my-namespace      Active   3s

使用 Podman 拉取容器镜像

容器是个 Linux 系统,几乎是最小化的,可以由 Kubernetes 管理。LXC 项目和 Docker 定义了大部分的容器规范。最近加入容器工具集的是 Podman,它不需要守护进程就可以运行,为此受到了很多用户的欢迎。

通过 Podman 可以从 Docker Hub 或者 Quay.io 等存储库拉取容器镜像。这一操作对应的 Ansible 语法也很简单,只需要将存储库网站提供的镜像路径写在剧本中的相应位置就可以了:

  1.    - name: pull an image
  2.       podman_image:
  3.         name: quay.io/jitesoft/nginx

使用 yamllint 验证:

  1. $ yamllint example.yaml

运行剧本:

  1. $ ansible-playbook ./example.yaml
  2. [WARNING]: provided hosts listisempty, only localhost is available.
  3. Note that the implicit localhost does not match 'all'
  4.  
  5. PLAY [localhost]************************
  6.  
  7. TASK [GatheringFacts]************************
  8. ok:[localhost]
  9.  
  10. TASK [create k8s namespace]************************
  11. ok:[localhost]
  12.  
  13. TASK [pull an image]************************
  14. changed:[localhost]
  15.  
  16. PLAY RECAP ************************
  17. localhost: ok=3 changed=1 unreachable=0 failed=0
  18.            skipped=0 rescued=0 ignored=0

使用 Ansible 实现部署

Ansible 除了可以执行小型维护任务以外,还可以通过剧本实现其它由 kubectl 实现的功能,因为两者的 YAML 文件之间只有少量的差异。在 Kubernetes 中使用的 YAML 文件只需要稍加改动,就可以在 Ansible 剧本中使用。例如下面这个用于使用 kubectl 命令部署 Web 服务器的 YAML 文件:

  1. apiVersion: apps/v1
  2. kind:Deployment
  3. metadata:
  4.   name:my-webserver
  5. spec:
  6.   selector:
  7.     matchLabels:
  8.       run:my-webserver
  9.   replicas:1
  10.   template:
  11.     metadata:
  12.       labels:
  13.         run:my-webserver
  14.     spec:
  15.       containers:
  16.       - name:my-webserver
  17.         image: nginx
  18.         ports:
  19.         - containerPort:80

如果你对其中的参数比较熟悉,你只要把 YAML 文件中的大部分内容放到剧本中的 definition 部分,就可以在 Ansible 中使用了:

  1.    - name: deploy a web server
  2.       k8s:
  3.         api_version: v1
  4.         namespace:my-namespace
  5.         definition:
  6.           kind:Deployment
  7.           metadata:
  8.             labels:
  9.               app: nginx
  10.             name: nginx-deploy
  11.           spec:
  12.             replicas:1
  13.             selector:
  14.               matchLabels:
  15.                 app: nginx
  16.             template:
  17.               metadata:
  18.                 labels:
  19.                   app: nginx
  20.               spec:
  21.                 containers:
  22.                   - name:my-webserver
  23.                     image: quay.io/jitesoft/nginx
  24.                     ports:
  25.                       - containerPort:80
  26.                         protocol: TCP

执行完成后,使用 kubectl 命令可以看到预期中的的部署deployment:

  1. $ kubectl -n my-namespaceget pods
  2. NAME                      READY  STATUS
  3. nginx-deploy-7fdc9-t9wc2  1/1    Running

在云上使用模块

 

随着现在越来越多的开发和部署工作往云上转移的趋势,我们必须了解如何在云上实现自动化。其中 k8s 和 podman_image 这两个模块只是云开发中的其中一小部分。你可以在你的工作流程中寻找一些需要自动化的任务,并学习如何使用 Ansible 让你在这些任务上事半功倍。

 

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/231121.html<

(0)
运维的头像运维
上一篇2025-04-19 13:29
下一篇 2025-04-19 13:31

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注