geerlingguy.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 init
で設定ファイルを使用して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 config fileおよびkubelet integrationのドキュメントを参照してください。
注意:これはkubelet構成の推奨される方法です。ほとんどのコマンドラインオプションは非推奨です。
注意:推奨するcgroupDriverはあなたのコンテナランタイムに依存します。このロールでDockerを使用する場合、代わりにこの値を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: "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マニフェストファイルです。フラネルネットワーク構成をカスタマイズする必要がある場合は、自分のファイルをサーバーにコピーして適用することもできます。
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
2つ以上のノード(単一コントロールプレーン)のクラスター
コントロールプレーンのインベントリ変数:
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
を実行すると、すべてのサーバーのリストが表示されるはずです。
ライセンス
MIT / BSD
著者情報
このロールは2018年にJeff Geerlingによって作成されました。彼はAnsible for DevOpsの著者です。
Kubernetes for Linux.
ansible-galaxy install geerlingguy.kubernetes