tcharl.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の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>のパスです。ディレクトリが存在しない場合、このロールが作成します。

以下の変数はのオプションとして解析されます。構文を理解するには、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 config filekubelet 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の著者です。

インストール
ansible-galaxy install tcharl.kubernetes
ライセンス
mit
ダウンロード
407
所有者
Osgiliath frameworks and all stuff from the Osgiliath corp!