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

以下の変数はにオプションとして解析されます。文法について理解するには、kubelet-integrationおよびkubeadm-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 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の著者です。

インストール
ansible-galaxy install geerlingguy.kubernetes
ライセンス
mit
ダウンロード
252.3k
所有者
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns