geerlingguy.kubernetes

Ansible角色:Kubernetes

CI

这是一个用于在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包。您可以提供一个包名称列表,或者设置namestate以更好地控制包的状态(如presentabsentlatest等)。

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的控制平面(默认)或节点。控制平面将运行kubeadm init以初始化整个K8s控制平面,而节点将运行kubeadm join以加入控制平面

配置kubeadm和kubelet的变量(通过配置文件,推荐使用)

使用此角色,kubeadm init将运行--config <FILE>

kubernetes_kubeadm_kubelet_config_file_path: '/etc/kubernetes/kubeadm-kubelet-config.yaml'

<FILE>的路径。如果目录不存在,此角色将创建它。

以下变量被解析为的选项。要了解其语法,请参见 kubelet-integrationkubeadm-config-file。配置文件的框架(apiVersionkind)将由此角色创建,因此请不要在变量中定义它们(见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.cidrkubernetes_version_kubeadm是为了向后兼容此角色的旧版本。

kubernetes_config_kubelet_configuration:
  cgroupDriver: systemd

通过kubeadm init进程在集群的任何节点上配置kubelet的选项。有关语法选项,请参阅 kubelet配置文件kubelet集成 文档。

注意:这是推荐的kubelet配置方式。大多数命令行选项已被弃用。

注意:推荐的cgroupDriver取决于您的容器运行时。如果使用此角色与Docker而不是containerd,这个值应该改为cgroupfs

kubernetes_config_kube_proxy_configuration: {}

在kubelet配置的KubeProxyConfiguration部分中配置kubelet代理的选项。

通过命令行选项配置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控制平面部署pod的污点。如果您有一个单节点集群,这应该为True。否则,如果您希望有一个专用的Kubernetes控制平面,不运行其他pod,则应设置为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(默认)、calicoweave作为集群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: "stable"
kubernetes_apt_keyring_file: "/etc/apt/keyrings/kubernetes-apt-keyring.asc"
kubernetes_apt_repository: "deb [signed-by={{ kubernetes_apt_keyring_file }}] https://pkgs.k8s.io/core:/{{ kubernetes_apt_release_channel }}:/v{{ kubernetes_version }}/deb/ /"

Kubernetes安装的apt仓库选项。

kubernetes_yum_base_url: "https://pkgs.k8s.io/core:/stable:/v{{ kubernetes_version }}/rpm/"
kubernetes_yum_gpg_key: "https://pkgs.k8s.io/core:/stable:/v{{ kubernetes_version }}/rpm/repodata/repomd.xml.key"
kubernetes_yum_gpg_check: true
kubernetes_yum_repo_gpg_check: true

Kubernetes安装的yum仓库选项。如果您在防火墙后面,可以将kubernete_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而不是Flannel)的Calico清单文件。

依赖项

无。

示例剧本

单节点(仅控制平面)集群

- 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》的作者。

安装
ansible-galaxy install geerlingguy.kubernetes
许可证
mit
下载
252.3k
拥有者
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns