O2 BLOG

Kubernetes(0:テンプレート構築)

VMテンプレートの作成

pveのコンソールにてVMイメージのテンプレートを作成

# wget https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img # qm create 999 --memory 4096 --net0 virtio,bridge=vmbr0 # qm importdisk 999 focal-server-cloudimg-amd64.img local-lvm # qm set 999 --name k8s-template # qm set 999 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-999-disk-0

Cloud-initの設定

Cloud-initドライブを定義

# qm set 999 --ide2 local-lvm:cloudinit # qm set 999 --boot c --bootdisk scsi0 # qm set 999 --serial0 socket --vga serial0

構築に必要なツールのインストール

CRI構築

下記URLの公式ドキュメントを参考にコンテナランタイムを構築 https://kubernetes.io/docs/setup/production-environment/container-runtimes/

CRIはコンテナランタイムインターフェースの略で,コンテナを運用するためのツール。 Dockerのこの一つである。

Containerd・runc のインストール

競合を防ぐため古いパッケージを削除

sudo apt remove containerd runc

Dockerがcontainerdとruncをまとめたcontainerd.ioを用意してくれているので,そのrepositoryを追加

sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

containerd.ioをインストール

sudo apt update sudo apt install containerd.io

CNI構築

https://qiita.com/yuanying/items/68b2a32b4d217e679955 CNIとはコンテナのネットワークインタフェースを設定するための、runtime(containerd)とplugin(flannel)間のインタフェース

wget https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz sudo mkdir -p /opt/cni/bin sudo tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.1.1.tgz

再起動後にも有効にするため設定

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter #sysctl params required by setup, params persist across reboots cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF #Apply sysctl params without reboot sudo sysctl --system

kubeadm構築

下記URLの公式ドキュメントを参考にkubeadmを構築 https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

sudo apt update sudo apt install -y apt-transport-https ca-certificates curl
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update sudo apt install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl

tailscale構築

# この時点ではログインしない curl -fsSL https://tailscale.com/install.sh | sh

cockpit構築

sudo apt-get install cockpit -y sudo systemctl enable --now cockpit.socket

テンプレート化

# qm template 999