LoginSignup
8
7

More than 3 years have passed since last update.

【2020/06版】今使えるKubernetes on CentOS7設定手順

Last updated at Posted at 2020-06-26

宗教上の理由などにより既存のサービスが使えないのでLinux環境に一からKubernetesを作りたいよって人、書いてある通りにやってるのになぜか動かないよって人向け
検証環境はVirtualBox上のCentOS7.8
k8s-master IP:192.168.100.200 CPU:2 MEM:2GB HDD:16GB
k8s-node01 IP:192.168.100.201 CPU:2 MEM:2GB HDD:16GB
k8s-node02 IP:192.168.100.202 CPU:2 MEM:2GB HDD:16GB
(マスターには2Core以上が必須らしい)

※初回投稿後自分の書いた記事で再現テストを何度かやって何か所か修正しました

お世話になった記事

kubeadmでkubernetes v1.14.1のインストール
CentOS 上 に Kubernetes クラスター を構築する方法
kubeadm で kubernetes v1.8 + Flannel をインストール

手順

以下の手順はrootユーザーとして行うものとする

マスター、ワーカー共通手順

準備

・システムアップデート
・SELinux無効化
・SWAP無効化

# yum update
# systemctl reboot -i
# setenforce 0
# swapoff -a
/etc/selinux/config
-SELINUX=enforcing
+#SELINUX=enforcing
+SELINUX=disabled
/etc/fstab
-/dev/mapper/centos-swap swap                    swap    defaults        0 0
+# /dev/mapper/centos-swap swap                    swap    defaults        0 0

・hostsの設定

/etc/hosts
+192.168.100.200    k8s-master
+192.168.100.201    k8s-node01
+192.168.100.202    k8s-node02

Dockerのインストール

# yum install yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# yum install docker-ce
# mkdir -m 644 /etc/docker
/etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
# systemctl enable docker && systemctl start docker

kubernetesのインストール

/etc/yum.repos.d/kube-rnetes.repo
[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
exclude=kube*
# yum install kubelet kubeadm --disableexcludes=kubernetes
# systemctl enable kubelet && systemctl start kubelet

※VM環境の場合ここで一旦シャットダウンし、クローンを作る
クローン生成後一端起動してIPを再設定する

/etc/sysconfig/network-scripts/ifcfg-enp0s3
DEVICE=enp0s3
ONBOOT=yes
IPADDR=192.168.100.200OSインストール時に固定IPにした場合ここだけを変更して「systemctl restart networkPREFIX=24
GATEWAY=192.168.100.1
DNS1=8.8.8.8

環境によってenp0s3の部分が違う場合もあるのでip addrなどで確認すること

Firewallの設定

Master側

firewall-cmd --permanent --new-zone=k8s
firewall-cmd --permanent --zone=k8s --add-source=192.168.100.201
firewall-cmd --permanent --zone=k8s --add-source=192.168.100.202
firewall-cmd --permanent --zone=k8s --add-port 6443/tcp
firewall-cmd --permanent --zone=k8s --add-port 2379-2380/tcp
firewall-cmd --permanent --zone=k8s --add-port 10250/tcp
firewall-cmd --permanent --zone=k8s --add-port 10251/tcp
firewall-cmd --permanent --zone=k8s --add-port 10252/tcp
firewall-cmd --reload

Worker側

firewall-cmd --permanent --new-zone=k8s
firewall-cmd --permanent --zone=k8s --add-source=192.168.100.200
firewall-cmd --permanent --zone=k8s --add-port 10250/tcp
firewall-cmd --permanent --zone=k8s --add-port 30000-32767/tcp
firewall-cmd --reload

Master設定

# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
# kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version v1.18.4

(v1.18.4の部分はインストールしたバージョン)
kubeadm initだけでもいい気もするけどVMのBuild&Scrapしてると
オプション付けてた方がうまくいくような気がするのでとりあえず付ける事にした

実行後以下の様な文字列が実行結果の最終行に表示されるので控えておく
kubeadm join 192.168.100.200:6443 --token ***.************* --discovery-token-ca-cert-hash sha256:****************************************************************

(*の部分はkubeadm initコマンドを実行する度に生成される)

kubectl get nodesなどのコマンドで正しい応答を得る為に以下を実行

# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config

flannelのインストール

これがないとYAMLを実行してもPod生成がペンディングで止まる

# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

※古い記事の場合https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml
を参照しようとしてエラーが多発する

Worker設定

上で得られたkubeadm joinを実行

# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
# kubeadm join 192.168.100.200:6443 --token ******.**************** --discovery-token-ca-cert-hash sha256:****************************************************************

Master側で確認

Workerノードを2つ繋げると以下のようになる

# kubectl get nodes
NAME         STATUS   ROLES    AGE     VERSION
k8s-master   Ready    master   3h20m   v1.18.4
k8s-node01   Ready    <none>   3h20m   v1.18.4
k8s-node02   Ready    <none>   3h20m   v1.18.4

検証用YAMLを実行

test.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-test
spec:
  replicas: 10
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: nginx
        image: nginx:1.18

YAMLの適用

# kubectl apply -f test.yml

実行してしばらく経つと以下のようになる

nginx-test-74b9fcbbc7-2t2j9   1/1     Running   0          35s
nginx-test-74b9fcbbc7-4776q   1/1     Running   0          35s
nginx-test-74b9fcbbc7-bp92t   1/1     Running   0          35s
nginx-test-74b9fcbbc7-fhv4k   1/1     Running   0          35s
nginx-test-74b9fcbbc7-hfdm4   1/1     Running   0          35s
nginx-test-74b9fcbbc7-hp98l   1/1     Running   0          35s
nginx-test-74b9fcbbc7-ln484   1/1     Running   0          35s
nginx-test-74b9fcbbc7-mqjwl   1/1     Running   0          35s
nginx-test-74b9fcbbc7-nx7vn   1/1     Running   0          35s
nginx-test-74b9fcbbc7-v96rt   1/1     Running   0          35s

上手くいかないとき

再起動後などkubeadm initやkubeadm joinなどでうまくいかない場合

# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

を再度実行すると多分うまくいく
もしくはWorkerの場合

# kubeadm reset

でリセットするなどする必要がある場合も

ゾンビポッドなどが残ってどうしようもないような場合などは
Master、Workerそれぞれで

# kubeadm reset
# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
# kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version v1.18.4
# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config
# kubeadm reset
# echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
# kubeadm join 192.168.100.200:6443 --token ******.**************** --discovery-token-ca-cert-hash sha256:****************************************************************

とやるとまっさらな環境で再度試行できる

課題

Dashboradの実行がまだ再現できていない

8
7
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
8
7