tcharl.kubernetes
Ansible角色:Kubernetes
一个在Linux上安装Kubernetes的Ansible角色。
要求
需要兼容的容器运行时;推荐使用的CRI安装角色:geerlingguy.containerd
。
角色变量
可用的变量列如下,并附有默认值(见defaults/main.yml
):
kubernetes_packages:
- name: kubelet
state: present
- name: kubectl
state: present
- name: kubeadm
state: present
- name: kubernetes-cni
state: present
要在服务器上安装的Kubernetes包。你可以提供包名的列表,或者设置name
和state
,以更好地控制包的状态,比如present
、absent
、latest
等等。
kubernetes_version: '1.25'
kubernetes_version_rhel_package: '1.25.1'
要安装的Kubernetes次要版本。kubernetes_version
用于在Debian上固定apt包的版本,并作为传递给kubeadm init
命令的Kubernetes版本(见kubernetes_version_kubeadm
)。kubernetes_version_rhel_package
变量必须是特定的Kubernetes版本,并用于在Red Hat / CentOS服务器上固定版本。
kubernetes_role: control_plane
该服务器是否作为Kubernetes control_plane
(默认)或node
使用。控制平面上将运行kubeadm init
来初始化整个K8s控制平面,而node
上将运行kubeadm join
将其加入到control_plane
。
通过配置文件配置kubeadm和kubelet(推荐)
使用此角色,kubeadm init
将与--config <FILE>
一同运行。
kubernetes_kubeadm_kubelet_config_file_path: '/etc/kubernetes/kubeadm-kubelet-config.yaml'
<FILE>
的路径。如果目录不存在,此角色将创建它。
以下变量被解析为apiVersion
,kind
),因此请勿在变量中定义它们。(见templates/kubeadm-kubelet-config.j2
)。
kubernetes_config_init_configuration:
localAPIEndpoint:
advertiseAddress: "{{ kubernetes_apiserver_advertise_address | default(ansible_default_ipv4.address, true) }}"
定义kind: InitConfiguration
下的选项。在此包含kubernetes_apiserver_advertise_address
是为了向后兼容早期版本的该角色,在其中使用了命令行选项。
kubernetes_config_cluster_configuration:
networking:
podSubnet: "{{ kubernetes_pod_network.cidr }}"
kubernetesVersion: "{{ kubernetes_version_kubeadm }}"
kind: ClusterConfiguration
下的选项。在此包含kubernetes_pod_network.cidr
和kubernetes_version_kubeadm
是为了向后兼容早期版本的该角色,在其中它们是通过命令行选项使用的。
kubernetes_config_kubelet_configuration:
cgroupDriver: systemd
通过kubeadm init
过程配置集群中任何节点的kubelet的选项。有关语法选项,请参阅kubelet配置文件和kubelet集成文档。
注意:这是配置kubelet的推荐方式。大多数命令行选项已不再推荐使用。
注意:建议的cgroupDriver取决于你的容器运行时。当使用Docker而不是containerd时,此值应更改为cgroupfs
。
kubernetes_config_kube_proxy_configuration: {}
用于配置kubelet的代理配置在kubelet配置的KubeProxyConfiguration
部分中的选项。
通过命令行选项配置kubeadm和kubelet的变量
kubernetes_kubelet_extra_args: ""
kubernetes_kubelet_extra_args_config_file: /etc/default/kubelet
在启动时传递给kubelet
的额外参数。例如,如果要允许kubelet
在服务器上启用交换分区的情况下启动,则将其设置为:"--fail-swap-on=false"
。或者要指定kubelet
报告的节点IP,可以设置为"--node-ip={{ ansible_host }}"
。这个选项已不推荐,建议使用kubernetes_config_kubelet_configuration
。
kubernetes_kubeadm_init_extra_opts: ""
在K8s控制平面初始化期间传递给kubeadm init
的额外参数。例如,要指定API服务器证书的额外主题备用名称,则将其设置为:"--apiserver-cert-extra-sans my-custom.host"
kubernetes_join_command_extra_opts: ""
在K8s节点初始化期间传递给生成的kubeadm join
命令的额外参数。例如,要忽略某些预检错误(如交换分区启用),可以设置为:--ignore-preflight-errors=Swap
额外变量
kubernetes_allow_pods_on_control_plane: true
是否删除拒绝在Kubernetes控制平面上部署pods的污点。如果你有一个单节点集群,这应该是True
。否则,如果想要一个不运行其他pods的独立Kubernetes控制平面,则设置为False
。
kubernetes_pod_network:
# Flannel CNI.
cni: 'flannel'
cidr: '10.244.0.0/16'
#
# Calico CNI.
# cni: 'calico'
# cidr: '192.168.0.0/16'
#
# Weave CNI.
# cni: 'weave'
# cidr: '192.168.0.0/16'
此角色当前支持flannel
(默认)、calico
或weave
作为集群pod网络。只选择一个使用,对于它们之间的转换不会自动完成,可能会导致网络问题;如果需要从一个切换到另一个,应该在此角色之外处理。
kubernetes_apiserver_advertise_address: ''
kubernetes_version_kubeadm: 'stable-{{ kubernetes_version }}'
kubernetes_ignore_preflight_errors: 'all'
在初始化Kubernetes控制平面时传递给kubeadm init
的选项。如果kubernetes_apiserver_advertise_address
为空,则默认为ansible_default_ipv4.address
。
kubernetes_apt_release_channel: main
kubernetes_apt_repository: "deb http://apt.kubernetes.io/ kubernetes-xenial {{ kubernetes_apt_release_channel }}"
kubernetes_apt_ignore_key_error: false
Kubernetes安装的apt仓库选项。
kubernetes_yum_arch: x86_64
kubernetes_yum_base_url: "https://packages.cloud.google.com/yum/repos/kubernetes-el7-{{ kubernetes_yum_arch }}"
kubernetes_yum_gpg_key:
- https://packages.cloud.google.com/yum/doc/yum-key.gpg
- https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
kubernetes_yum_gpg_check: true
kubernetes_yum_repo_gpg_check: true
Kubernetes安装的yum仓库选项。如果你的环境在防火墙后,可以将kubernetes_yum_gpg_key
更改为不同的URL,或提供一个值得信赖的镜像。通常需要同时更改kubernetes_yum_base_url
。
kubernetes_flannel_manifest_file: https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
应用到Kubernetes集群的Flannel清单文件以启用网络。如果需要自定义Flannel网络配置,也可以将自己的文件复制到服务器并应用。
kubernetes_calico_manifest_file: https://projectcalico.docs.tigera.io/manifests/calico.yaml
应用到Kubernetes集群的Calico清单文件(如果使用Calico而不是Flannel)。
依赖关系
无。
示例剧本
单节点(仅控制平面)集群
- hosts: all
vars:
kubernetes_allow_pods_on_control_plane: true
roles:
- geerlingguy.docker
- geerlingguy.kubernetes
两个或更多节点(单控制平面)集群
控制平面库存变量:
kubernetes_role: "control_plane"
节点库存变量:
kubernetes_role: "node"
剧本:
- hosts: all
vars:
kubernetes_allow_pods_on_control_plane: true
roles:
- geerlingguy.docker
- geerlingguy.kubernetes
然后,登录到Kubernetes控制平面,作为root用户运行kubectl get nodes
,应该会看到所有服务器的列表。
许可证
MIT / BSD
作者信息
此角色由Jeff Geerling于2018年创建,著有《Ansible for DevOps》。
Kubernetes for Linux.
ansible-galaxy install tcharl.kubernetes