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
として機能するかどうかを示します。コントロールプレーンでは、K8sコントロールプレーンを初期化するためにkubeadm init
が実行され、node
では、コントロールプレーンに参加するためにkubeadm join
が実行されます。
kubeadmとkubeletをkubeadm init
を通じて設定ファイルで構成するための変数(推奨)
このロールでは、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 config fileとkubelet integrationのドキュメントを参照ください。
注意: これは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コントロールプレーンにポッドが配置されるのを禁止する汚染を除去するかどうかを示します。シングルノードクラスタの場合、これは確実にTrue
にすべきです。そうでなければ、他のポッドが動作しない専用の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
をサポートしています。クラスターのために1つだけ選択してください。自動的に変換は行われず、ネットワークが破損する可能性があるため、変更する必要がある場合は、このロールの外側で行う必要があります。
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クラスターにネットワーキングを有効にするために適用するフラネルマニフェストファイルです。必要に応じて、自分のファイルをサーバーにコピーして適用することもできます。
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コントロールプレーンにログインし、kubectl get nodes
をrootとして実行すれば、すべてのサーバーのリストが表示されるはずです。
ライセンス
MIT / BSD
作者情報
このロールは2018年にJeff Geerlingによって作成されました。Ansible for DevOpsの著者です。
Kubernetes for Linux.
ansible-galaxy install tcharl.kubernetes