创建 K8S 对象
简介
本指南将向您展示如何利用 Ansible 创建 Kubernetes 对象,例如 Pod、Deployment 和 Secret。
场景需求
软件
必须安装 Ansible 2.9.17 或更高版本
必须在 Ansible 控制器(如果未针对 localhost 执行,则为目标主机)上安装 Python 模块
kubernetes
Kubernetes 集群
在 Ansible 控制器上安装 Kubectl 二进制文件
访问/凭据
使用给定的 Kubernetes 集群配置 Kubeconfig
假设条件
用户具有在给定的 Kubernetes 集群上创建、删除和更新资源的必要授权级别。
注意事项
community.kubernetes 2.0.0 已重命名为 kubernetes.core
示例描述
在这个用例/示例中,我们将在给定的 Kubernetes 集群中创建一个 Pod。以下 Ansible playbook 展示了为此所需的基本参数。
---
- hosts: localhost
collections:
- kubernetes.core
tasks:
- name: Create a pod
kubernetes.core.k8s:
state: present
definition:
apiVersion: v1
kind: Pod
metadata:
name: "utilitypod-1"
namespace: default
labels:
app: galaxy
spec:
containers:
- name: utilitypod
image: busybox
由于 Ansible 利用 Kubernetes API 执行操作,因此在这个用例中,我们将直接连接到 Kubernetes 集群。
首先,我们需要一些信息。这里您使用的是在您的机器上预先配置的 Kubeconfig。Kubeconfig 通常位于 ~/.kube/config
。强烈建议使用 ansible-vault 或 Ansible Tower 凭据 以更安全的方式存储密码、用户证书等敏感信息。
现在您需要提供将要创建的 Pod 的信息。使用 kubernetes.core.k8s
模块的 definition
参数,您可以指定 PodTemplate。此 PodTemplate 与您提供给 kubectl
命令的 PodTemplate 相同。
预期结果
此 playbook 完成后,您将看到一些 JSON 输出。此输出显示从模块和集群返回的关于新创建的 Pod 的各种参数。
{
"changed": true,
"method": "create",
"result": {
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"creationTimestamp": "2020-10-03T15:36:25Z",
"labels": {
"app": "galaxy"
},
"name": "utilitypod-1",
"namespace": "default",
"resourceVersion": "4511073",
"selfLink": "/api/v1/namespaces/default/pods/utilitypod-1",
"uid": "c7dec819-09df-4efd-9d78-67cf010b4f4e"
},
"spec": {
"containers": [{
"image": "busybox",
"imagePullPolicy": "Always",
"name": "utilitypod",
"resources": {},
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File",
"volumeMounts": [{
"mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
"name": "default-token-6j842",
"readOnly": true
}]
}],
"dnsPolicy": "ClusterFirst",
"enableServiceLinks": true,
"priority": 0,
"restartPolicy": "Always",
"schedulerName": "default-scheduler",
"securityContext": {},
"serviceAccount": "default",
"serviceAccountName": "default",
"terminationGracePeriodSeconds": 30,
"tolerations": [{
"effect": "NoExecute",
"key": "node.kubernetes.io/not-ready",
"operator": "Exists",
"tolerationSeconds": 300
},
{
"effect": "NoExecute",
"key": "node.kubernetes.io/unreachable",
"operator": "Exists",
"tolerationSeconds": 300
}
],
"volumes": [{
"name": "default-token-6j842",
"secret": {
"defaultMode": 420,
"secretName": "default-token-6j842"
}
}]
},
"status": {
"phase": "Pending",
"qosClass": "BestEffort"
}
}
}
在上例中,“changed” 为
True
,这表示 Pod 创建已在给定集群上启动。这可能需要一些时间,具体取决于您的环境。
故障排除
需要检查的事项
检查为用户名和密码提供的 value 是否正确
检查 Kubeconfig 是否填充了正确的 value
另请参阅
- Kubernetes Python 客户端
Kubernetes Python 客户端的 GitHub 页面
- Kubernetes Python 客户端 - 问题跟踪器
Kubernetes Python 客户端的问题跟踪器
- Kubectl 安装
安装 Kubectl 的安装指南
- 使用 playbook
Playbook 简介
- 使用加密变量和文件
在 playbook 中使用 Vault