CentOS7にkubernetesを最小構成でインストールしたメモです。
基本的には公式の手順をそのままやっています。
環境
バージョン
項目 | バージョン |
---|---|
CentOS | 7.6.1810 |
docker | 18.09.5, build e8ff056 |
kubernetes | 1.14.1 |
登場人物
ホスト名 | 役割 |
---|---|
k8s-master | masterノード |
k8s-node01 | workerノード |
kubernetesインストール
一先ず動かす事を目的としているので、firewalldとSELinuxは無効化しています。
dockerインストール
ここでは、dockerを使います。
以下の手順をmasterノードとworkerノードで実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
[root@k8s-master ~]# yum -y install yum-utils device-mapper-persistent-data lvm2 [root@k8s-master ~]# yum-config-manager \ > --add-repo \ > https://download.docker.com/linux/centos/docker-ce.repo [root@k8s-master ~]# yum -y update && yum -y install docker-ce [root@k8s-master ~]# mkdir /etc/docker [root@k8s-master ~]# cat > /etc/docker/daemon.json <<EOF > { > "exec-opts": ["native.cgroupdriver=systemd"], > "log-driver": "json-file", > "log-opts": { > "max-size": "100m" > }, > "storage-driver": "overlay2", > "storage-opts": [ > "overlay2.override_kernel_check=true" > ] > } > EOF [root@k8s-master ~]# mkdir -p /etc/systemd/system/docker.service.d [root@k8s-master ~]# systemctl daemon-reload [root@k8s-master ~]# systemctl restart docker [root@k8s-master ~]# systemctl enable docker |
kubeadmin、kubelet、kubectlインストール
リポジトリ登録
以下の手順をmasterノードとworkerノードで実行します。
1 2 3 4 5 6 7 8 9 10 11 |
[root@k8s-master ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.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* > EOF |
ルーティング設定
以下の手順をmasterノードとworkerノードで実行します。
1 2 3 4 5 6 |
[root@k8s-master ~]# cat <<EOF > /etc/sysctl.d/k8s.conf > net.bridge.bridge-nf-call-ip6tables = 1 > net.bridge.bridge-nf-call-iptables = 1 > EOF [root@k8s-master ~]# sysctl --system |
swap無効化
swapを無効化しないと kubelet
が起動しないのでmasterノードとworkerノードで無効化します。
1 2 3 4 5 |
[root@k8s-master ~]# swapoff -a [root@k8s-master ~]# vi /etc/fstab (snip) #/dev/mapper/centos-swap swap swap defaults 0 0 |
masterノード
以下の手順をmasterノードで実行します。
1 2 |
[root@k8s-master ~]# yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes |
workerノード
以下の手順をworkerノードで実行します。
1 2 |
[root@k8s-node01 ~]# yum install -y kubeadm --disableexcludes=kubernetes |
kubernetesクラスタ構築
masterノードで以下の初期化コマンドを実行します。
Your Kubernetes control-plane has initialized successfully!
が表示されれば問題なく実行完了です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[root@k8s-master ~]# kubeadm init (snip) Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.0.63:6443 --token k3vtgp.e1ocoq0kuepclbzp \ --discovery-token-ca-cert-hash sha256:290d7e1b2a585bd4430407c2f9a90ab7b4d4369e9bd097ea1e4dcb5dadb27500 [root@k8s-master ~]# systemctl enable kubelet |
kubectl
を使ってコマンドを実行できるようにするために以下のコマンドをmasterノードで実行します。
1 2 3 4 |
[root@k8s-master ~]# mkdir -p $HOME/.kube [root@k8s-master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [root@k8s-master ~]# chown $(id -u):$(id -g) $HOME/.kube/config |
podのnamespaceを表示してみます。
1 2 3 4 5 6 7 8 9 10 |
[root@k8s-master ~]# kubectl get pod --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-fb8b8dccf-4p9r9 0/1 Pending 0 117s kube-system coredns-fb8b8dccf-lqhfp 0/1 Pending 0 117s kube-system etcd-k8s-master 1/1 Running 0 50s kube-system kube-apiserver-k8s-master 1/1 Running 0 62s kube-system kube-controller-manager-k8s-master 1/1 Running 0 42s kube-system kube-proxy-zz8jr 1/1 Running 0 116s kube-system kube-scheduler-k8s-master 1/1 Running 0 60s |
coredns-xxxxx
が Pending
になっているのでCNI(Container Network Interface)をインストールします。
ここでは Weave Net
を使います。
masterノードで以下のコマンドを実行します。
1 2 |
[root@k8s-master ~]# kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" |
coredns-xxxxx
が Running
になったことを確認します。
1 2 3 4 5 6 7 8 9 10 11 |
[root@k8s-master ~]# kubectl get pod --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-fb8b8dccf-4p9r9 0/1 Running 0 4m37s kube-system coredns-fb8b8dccf-lqhfp 1/1 Running 0 4m37s kube-system etcd-k8s-master 1/1 Running 0 3m30s kube-system kube-apiserver-k8s-master 1/1 Running 0 3m42s kube-system kube-controller-manager-k8s-master 1/1 Running 0 3m22s kube-system kube-proxy-zz8jr 1/1 Running 0 4m36s kube-system kube-scheduler-k8s-master 1/1 Running 0 3m40s kube-system weave-net-v87t4 2/2 Running 0 31s |
次にworkerノードをjoinさせるため以下のコマンド(masterノードで初期化コマンドを実行した時に表示された)をworkerノードで実行します。
1 2 3 4 5 6 7 8 9 10 |
[root@k8s-node01 ~]# kubeadm join 192.168.0.63:6443 --token k3vtgp.e1ocoq0kuepclbzp \ > --discovery-token-ca-cert-hash sha256:290d7e1b2a585bd4430407c2f9a90ab7b4d4369e9bd097ea1e4dcb5dadb27500 (snip) This node has joined the cluster: * Certificate signing request was sent to apiserver and a response was received. * The Kubelet was informed of the new secure connection details. Run 'kubectl get nodes' on the control-plane to see this node join the cluster. [root@k8s-node01 ~]# systemctl enable kubelet |
masterノード側でworkerノードが認識されているか確認します。
1 2 3 4 5 |
[root@k8s-master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Ready master 6m11s v1.14.1 k8s-node01 NotReady <none> 27s v1.14.1 |
workerノードに ROLE
を設定するためmasterノードで以下のコマンドを実行します。
1 2 3 4 5 6 7 |
[root@k8s-master ~]# kubectl label node k8s-node01 node-role.kubernetes.io/worker=worker node/k8s-node01 labeled [root@k8s-master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Ready master 8m20s v1.14.1 k8s-node01 Ready worker 2m36s v1.14.1 |
これで一先ず簡単なクラスタは出来上がり 🙂