0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Kubesprayを利用してCRI-Oを利用するk8sクラスターを構築してみた

Posted at

はじめに

テスト系での障害検証のために通常はdockerを利用しているのですが、CRI-Oを有効にしたk8sクラスターをkubesprayで構築してみました。

検証結果は意味がなかった、となりましたが、今後のためにメモを残しておきます。

環境

この時点では kubespray に、v2.16.0 タグは存在していますが、テスト系をv2.15.1で構築しているので合わせています。

  • kubespray v2.15.1 (kubernetes v1.19.9)
  • ノード数: 3 (VMware Workstation v16 Pro, Mem:6GB, Disk:20GBx2, CPU:1)

導入は kubespray/README.md の手順に従っています。

参考情報

公式 CRI-O(crio.mdファイル)の読み方

kubesprayのガイドを読む前に、k8s-cluster.ymlファイルに、container_manager: docker の記述があるのは知っていたので、ここをcrioにすれば良いのかと思っていたら見事にはまりました。

metallbを有効にしているなど冗長ですが、inventory/mycluster/全体の差分を残しておきます。

ポイント1 - 公式ガイドに書かれているように全体を変更する

設定内容は各指定されたファイルに存在するものもありますし、デフォルト値と同じ指定もあるので、設定せずとも動く可能性はありますが、各ファイルで漏れなく、重複なく指定するようにしましょう。

下にあるdiffファイル全体のセクションを見てもらうのが良いと思います。

ポイント2 - コンテナイメージのmirrorsは必要がある場合に指定しましょう

all/crio.yml という存在しないファイルを配置するように指示がありますが、この内容は反映されます。

ただ記載されている内容は、local registoryやGKE(GCP)を利用していることを想定していると思われるので、mirrors:のセクションは環境に合わせて設定する必要があります。

私の環境では全て削除しました。間違って指定すると、コンテナイメージのpullに失敗します。
設定の詳細は、下にあるdiffファイル全体のセクションを確認してください。

ansible-playbook実行後の各ノードでは /etc/containers/registries.conf.d/docker.io.conf に反映されるので、ここを確認してください。

ポイント3 - crio_pids_limitが反映されなくても気にしない

issuesに登録されていますが、kubespray/roles/container-engine/cri-o/templates/crio.conf.j2 で、pids_limit はハードコードされていたので、ここでは反映されていません。

masterブランチとv2.16.0タグではきちんと反映されます。

diffファイル全体

kubespray/inventory/の変更点
diff -uNr inventory/sample/./credentials/kubeadm_certificate_key.creds inventory/mycluster/./credentials/kubeadm_certificate_key.creds
--- inventory/sample/./credentials/kubeadm_certificate_key.creds	1970-01-01 09:00:00.000000000 +0900
+++ inventory/mycluster/./credentials/kubeadm_certificate_key.creds	2021-07-20 09:39:15.779390811 +0900
@@ -0,0 +1 @@
+DA7C48FaD63d6e132Ad2C9eB651cD1dbdac489a5ac8FA2cDc8d15C35dCAcfC07
diff -uNr inventory/sample/./group_vars/all/all.yml inventory/mycluster/./group_vars/all/all.yml
--- inventory/sample/./group_vars/all/all.yml	2021-07-20 06:33:26.187367991 +0900
+++ inventory/mycluster/./group_vars/all/all.yml	2021-07-21 09:04:07.307993515 +0900
@@ -3,7 +3,7 @@
 etcd_data_dir: /var/lib/etcd
 
 ## Experimental kubeadm etcd deployment mode. Available only for new deployment
-etcd_kubeadm_enabled: false
+etcd_kubeadm_enabled: true
 
 ## Directory where the binaries will be installed
 bin_dir: /usr/local/bin
@@ -98,7 +98,7 @@
 # kube_read_only_port: 10255
 
 ## Set true to download and cache container
-# download_container: true
+download_container: false
 
 ## Deploy container engine
 # Set false if you want to deploy container engine manually.
@@ -117,3 +117,5 @@
 
 ## Check if access_ip responds to ping. Set false if your firewall blocks ICMP.
 # ping_access_ip: true
+#
+skip_downloads: false
diff -uNr inventory/sample/./group_vars/all/crio.yml inventory/mycluster/./group_vars/all/crio.yml
--- inventory/sample/./group_vars/all/crio.yml  1970-01-01 09:00:00.000000000 +0900
+++ inventory/mycluster/./group_vars/all/crio.yml       2021-07-21 12:12:14.696248167 +0900
@@ -0,0 +1,5 @@
+crio_registries_mirrors:
+  - prefix: docker.io
+    insecure: false
+    blocked: false
+    location: registry-1.docker.io
diff -uNr inventory/sample/./group_vars/etcd.yml inventory/mycluster/./group_vars/etcd.yml
--- inventory/sample/./group_vars/etcd.yml	2021-07-19 11:35:34.209627130 +0900
+++ inventory/mycluster/./group_vars/etcd.yml	2021-07-20 09:32:56.576889697 +0900
@@ -19,4 +19,4 @@
 # etcd_peer_client_auth: true
 
 ## Settings for etcd deployment type
-etcd_deployment_type: docker
+etcd_deployment_type: host
diff -uNr inventory/sample/./group_vars/k8s-cluster/addons.yml inventory/mycluster/./group_vars/k8s-cluster/addons.yml
--- inventory/sample/./group_vars/k8s-cluster/addons.yml	2021-07-20 06:33:26.187367991 +0900
+++ inventory/mycluster/./group_vars/k8s-cluster/addons.yml	2021-07-21 09:01:04.924486002 +0900
@@ -4,7 +4,7 @@
 # dashboard_enabled: true
 
 # Helm deployment
-helm_enabled: false
+helm_enabled: true
 
 # Registry deployment
 registry_enabled: false
@@ -13,10 +13,10 @@
 # registry_disk_size: "10Gi"
 
 # Metrics Server deployment
-metrics_server_enabled: false
-# metrics_server_kubelet_insecure_tls: true
-# metrics_server_metric_resolution: 60s
-# metrics_server_kubelet_preferred_address_types: "InternalIP"
+metrics_server_enabled: true
+metrics_server_kubelet_insecure_tls: true
+metrics_server_metric_resolution: 60s
+metrics_server_kubelet_preferred_address_types: "InternalIP"
 
 # Rancher Local Path Provisioner
 local_path_provisioner_enabled: false
@@ -125,11 +125,11 @@
 # cert_manager_namespace: "cert-manager"
 
 # MetalLB deployment
-metallb_enabled: false
-# metallb_ip_range:
-#   - "10.5.0.50-10.5.0.99"
-# metallb_version: v0.9.3
-# metallb_protocol: "layer2"
+metallb_enabled: true
+metallb_ip_range:
+  - "10.1.1.10-10.1.1.30"
+metallb_version: v0.10.2
+metallb_protocol: "layer2"
 # metallb_port: "7472"
 # metallb_limits_cpu: "100m"
 # metallb_limits_mem: "100Mi"
diff -uNr inventory/sample/./group_vars/k8s-cluster/k8s-cluster.yml inventory/mycluster/./group_vars/k8s-cluster/k8s-cluster.yml
--- inventory/sample/./group_vars/k8s-cluster/k8s-cluster.yml	2021-07-20 06:33:26.187367991 +0900
+++ inventory/mycluster/./group_vars/k8s-cluster/k8s-cluster.yml	2021-07-20 09:34:11.908892837 +0900
@@ -107,7 +107,7 @@
 
 # configure arp_ignore and arp_announce to avoid answering ARP queries from kube-ipvs0 interface
 # must be set to true for MetalLB to work
-kube_proxy_strict_arp: false
+kube_proxy_strict_arp: true
 
 # A string slice of values which specify the addresses to use for NodePorts.
 # Values may be valid IP blocks (e.g. 1.2.3.0/24, 1.2.3.4/32).
@@ -173,7 +173,7 @@
 
 ## Container runtime
 ## docker for docker, crio for cri-o and containerd for containerd.
-container_manager: docker
+container_manager: crio
 
 # Additional container runtimes
 kata_containers_enabled: false
@@ -313,3 +313,5 @@
 
 ## Automatically renew K8S control plane certificates on first Monday of each month
 auto_renew_certificates: false
+
+crio_pids_limit: 4096
diff -uNr inventory/sample/./hosts.yaml inventory/mycluster/./hosts.yaml
--- inventory/sample/./hosts.yaml	1970-01-01 09:00:00.000000000 +0900
+++ inventory/mycluster/./hosts.yaml	2021-07-20 06:34:58.886829344 +0900
@@ -0,0 +1,35 @@
+all:
+  hosts:
+    node1:
+      ansible_host: 10.1.1.183
+      ip: 10.1.1.183
+      access_ip: 10.1.1.183
+    node2:
+      ansible_host: 10.1.1.184
+      ip: 10.1.1.184
+      access_ip: 10.1.1.184
+    node3:
+      ansible_host: 10.1.1.136
+      ip: 10.1.1.136
+      access_ip: 10.1.1.136
+  children:
+    kube-master:
+      hosts:
+        node1:
+        node2:
+    kube-node:
+      hosts:
+        node1:
+        node2:
+        node3:
+    etcd:
+      hosts:
+        node1:
+        node2:
+        node3:
+    k8s-cluster:
+      children:
+        kube-master:
+        kube-node:
+    calico-rr:
+      hosts: {}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?