今年も当ブログをよろしくお願いします。
今回は去年作ったコントロールプレーンに追加するワーカーノードを作成していこうと思います。
なお、今回は1つの yamlファイルに命令をすべて書くのではなく、処理を『OSのセットアップ』『Containerd のセットアップ』『ワーカー用セットアップ』3つに分けて呼び出したいと思います。
ansible-playbook コマンドで呼び出すファイルには『コレとコレとコレの処理を使います』と書く感じですね。
実際にはこんな感じになります。
worker_node.yaml - name: setup worker node hosts: worker remote_user: root tasks: - name: setup os include_role: name: os-set - name: setup containerd include_role: name: containerd-set - name: setup worker include_role: name: worker-set
このように記述すると、rolesディレクトリ配下のディレクトリ『os-set』『containerd-set』『worker-set』にある『tasks』ディレクトリ内の『main.yaml』に書かれた処理を読み込んでくれます。
文章だとよくわからないので以下のような構造にする必要があるということになります。
├── worker_node.yaml │ ├── roles │ ├── os-set │ │ └── tasks │ │ └── main.yaml │ │ │ ├── containerd-set │ │ └── tasks │ │ └── main.yaml │ │ │ └── worker-set │ └── tasks │ └── main.yamlでは、それぞれの処理を見ていきましょう。
まずはOSのセットアップです。
SElinux停止やFWの停止をしています。
roles/os-set/tasks/main.yaml - name: SElinux Disable ansible.posix.selinux: state=disabled become: true - name: Reboot ansible.builtin.reboot: reboot_timeout=600 become: true - name: FW Stop service: name: firewalld state: stopped enabled: no続いて、Containerd をインストールします。
- name: Swap Stop swapoff shell : swapoff -a - name: Swap Stop /etc/fstab shell : sed -i '/centos-swap/s/^/# /g' /etc/fstab - name: kernel module file create file: path: /etc/modules-load.d/containerd.conf state: touch - name: kernel module file add line lineinfile: dest: /etc/modules-load.d/containerd.conf line: "{{ item }}" with_items: - "overlay" - "br_netfilter" - name: kernel module Load shell : modprobe overlay shell : modprobe br_netfilter - name: kernel parameter file create file: path: /etc/sysctl.d/99-kubernetes-cri.conf state: touch - name: kernel parameter file add line lineinfile: dest: /etc/sysctl.d/99-kubernetes-cri.conf line: "{{ item }}" with_items: - "net.bridge.bridge-nf-call-iptables = 1" - "net.ipv4.ip_forward = 1" - "net.bridge.bridge-nf-call-ip6tables = 1" - name: System Reload shell : sysctl --system - name: Package Install yum: name: yum-utils name: device-mapper-persistent-data name: lvm2 - name: containerd add repository shell : yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo - name: Containerd Install yum: name: containerd.io - name: containerd Setting folder create file: path: "/etc/containerd" state: directory - name: containerd Setting file create shell : containerd config default | sudo tee /etc/containerd/config.toml - name: containerd Restart service: name: containerd state: restarted enabled: no最後に、kubeadmin をインストールします。
roles/worker-set/tasks/main.yaml - name: kubernetes.repo create file: path: /etc/yum.repos.d/kubernetes.repo state: touch - name: add kubernetes.repo lineinfile: dest: /etc/yum.repos.d/kubernetes.repo line: "{{ item }}" with_items: - "[kubernetes]" - "name=Kubernetes" - "baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64" - "enabled=1" - "gpgcheck=1" - "repo_gpgcheck=1" - "gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg" - name: Install kubeadm yum: name: kubeadm上記のファイルを正しく配置して準備はおしまいです。
あとは、ansible-playbook worker_node.yaml を実行すると自動で処理を行ってくれるはずです。
このあと、コントロールプレーンで kubeadm token create --print-join-command を実行し、ワーカーで kubeadm join を実行するのですがそこはちょっと手動でお願いします・・・ 実はそこまで試したんですが、token を表示させて register: するところまではうまくいったんですがそこからコマンドだけを引っ張り出すのがうまくいかなかったのでいったん保留としています。
うまくいったら次回はそこの自動化について書きたいと思います。