LoginSignup
0
0

More than 1 year has passed since last update.

Amazon EC2上にKubernetes(v1.23.1)を構築

Posted at

はじめに

・KaaSを用いずEC2のOS上からKubeadmを用いてスクラッチで構築した。

top

リソース構成

・Master NodeとWorker Nodeは同じVPC内で構築
・ディスクサイズは8G

名前(hostname) 役割 IPアドレス
kube-masater Master Node 192.168.0.57
kube-worker1 Worker Node 192.168.0.42
kube-worker2 Worker Node 192.168.0.13

リソースバージョン

・K8sの要件でCPU2コア以上必要なのとサポートOSの指定があり以下とした。

EC2 OS Docker K8s
t3.small Centos 7.7 v1.13.1 v1.23.1

参考:kubeadmのインストール

構成図

top

手順

※AWSの手順は割愛

準備(OS設定)

まずは、K8s導入の準備としてOS初期設定を行う。
OSバージョンを確認。

# cat /etc/redhat-release 
CentOS Linux release 7.7.1908 (Core)

# uname -r
3.10.0-1062.12.1.el7.x86_64

Master NodeのHost設定。

# hostnamectl set-hostname kube-master

hostファイルを修正

# vi /etc/hosts
192.168.0.57    kube-master

Worker NodeについてもMaster Nodeと同様に実施。
こちらはMaster NodeのHost名も追加。

Worker Node1のHost設定

# hostnamectl set-hostname kube-node1
# vi /etc/hosts
192.168.0.42    kube-node1
192.168.0.57    kube-master

Worker Node2のHost設定

# hostnamectl set-hostname kube-node2
# vi /etc/hosts
192.168.0.13    kube-node2
192.168.0.57    kube-master

SELinuxの確認。
デフォルトで、Permissiveなのでそのままにする。無効化してもOK。

# getenforce 
Permissive

SWAPの確認。
t3.smallにSWAP領域はないので何もしない。ある場合は#swapoff -aで無効化する。

# free -m
              total        used        free      shared  buff/cache   available
Mem:           1799         656         104           2        1039         970
Swap:             0           0           0

Docker設定

Dockerのインストール。

# yum install -y docker

サービス起動とOS起動時のサービス自動有効化。

# systemctl start docker && systemctl enable docker

Dockerのバージョン確認。

# docker info | grep -i version
  WARNING: You're not using the default seccomp profile
Server Version: 1.13.1
(以下略)

Kubernetes v1.21から、kubeadmの標準のcgroupのdriverがsystemdになったため、設定を確認。

# docker info | grep -i driver
  WARNING: You're not using the default seccomp profile
Storage Driver: overlay2
Logging Driver: journald
Cgroup Driver: systemd

K8s設定

iptablesのパラメータ編集。
K8sのドキュメントにある通り、iptableでブリッジのトラフィックを表示させる設定を入れる。

cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

パラメータの設定反映。

# sysctl --system

K8sのyumレポジトリ登録。

# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
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
EOF

K8sパッケージ群のインストール。

# yum -y install kubelet kubeadm kubectl

K8sサービスの起動設定。

# systemctl daemon-reload
# systemctl enable kubelet && systemctl start kubelet

バージョン確認。

# kubectl version
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.1", GitCommit:"86ec240af8cbd1b60bcc4c03c20da9b98005b92e", GitTreeState:"clean", BuildDate:"2021-12-16T11:41:01Z", GoVersion:"go1.17.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.1", GitCommit:"86ec240af8cbd1b60bcc4c03c20da9b98005b92e", GitTreeState:"clean", BuildDate:"2021-12-16T11:34:54Z", GoVersion:"go1.17.5", Compiler:"gc", Platform:"linux/amd64"}
Master Node初期構築(kube-master)

今回、仮想ネットワークにflannelを用いる。
仮想ネットワークは「10.244.0.0/16」とし
マスターノードが使用するIPアドレスは「192.168.0.57」を指定する。

※Master Nodeのみ実施

# kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=192.168.0.57

何回かエラーになったが、無事完了(汗

(略)
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

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.57:6443 --token f85ges.sh7h0k3k4m3r2t9j \
        --discovery-token-ca-cert-hash sha256:95983cbdbe27480d61c7fa61fc1a3222b749fcf090a25f1ff4ff1526b6a861ce 

実行結果の案内に従い、クラスターを利用するためにconfigを設定

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

最後のkubeadm joinの内容は、Worker Node追加時に必要なので控えておく

kubeadm join 192.168.0.57:6443 --token f85ges.sh7h0k3k4m3r2t9j \
--discovery-token-ca-cert-hash sha256:95983cbdbe27480d61c7fa61fc1a3222b749fcf090a25f1ff4ff1526b6a861ce

Flannelのネットワークをインストール。

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

参考

Nodeの確認。STATUSがReadyになっていることを確認する。

# kubectl get nodes
NAME          STATUS   ROLES                  AGE   VERSION
kube-master   Ready    control-plane,master   10m   v1.23.1
Worker Node初期構築(kube-node1、kube-node2)

・Woker Nodeを追加

# kubeadm join 192.168.0.57:6443 --token f85ges.sh7h0k3k4m3r2t9j \
        --discovery-token-ca-cert-hash sha256:95983cbdbe27480d61c7fa61fc1a3222b749fcf090a25f1ff4ff1526b6a861ce

Nodeの状況確認。
master-nodeで実施。kube-node1,kube-node2が追加され、STATUSがReadyになっていることを確認する。

# kubectl get node -o wide
NAME          STATUS   ROLES                  AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
kube-master   Ready    control-plane,master   21m   v1.23.1   192.168.0.57   <none>        CentOS Linux 7 (Core)   3.10.0-1062.12.1.el7.x86_64   docker://1.13.1
kube-node1    Ready    <none>                 21m   v1.23.1   192.168.0.42   <none>        CentOS Linux 7 (Core)   3.10.0-1062.12.1.el7.x86_64   docker://1.13.1
kube-node2    Ready    <none>                 21m   v1.23.1   192.168.0.13   <none>        CentOS Linux 7 (Core)   3.10.0-1062.12.1.el7.x86_64   docker://1.13.1
# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE                         ERROR
scheduler            Healthy   ok                              
etcd-0               Healthy   {"health":"true","reason":""}   
controller-manager   Healthy   ok   

クラスターへの接続を確認。

# kubectl cluster-info
Kubernetes control plane is running at https://192.168.0.57:6443
CoreDNS is running at https://192.168.0.57:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

NameSpace

ここでは、NameSpaceを用いてリソースを隔離する。
まずは、現状の確認。

# kubectl get namespace
NAME                  STATUS   AGE
default               Active   41m
kube-node-lease       Active   41m
kube-public           Active   41m
kube-system           Active   41m

ここでは、NameSpaceにインスタンスIDを設定する。

# NS='i-02ee9d2a527948664'
# echo $NS
i-02ee9d2a527948664
# kubectl create namespace $NS

あらためて、NameSpaceを確認。

# kubectl get namespace
NAME                  STATUS   AGE
default               Active   41m
i-02ee9d2a527948664   Active   11s
kube-node-lease       Active   41m
kube-public           Active   41m
kube-system           Active   41m

コンテクストのNamespaceを設定した$NSに変更する。

# kubectl config get-contexts
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
*         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   

# kubectl config set-context --current --namespace=$NS

# kubectl config get-contexts
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
*         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   i-02ee9d2a527948664

環境準備はここまで。

参考
https://qiita.com/rawr/items/b4446ef8314109a270ca
https://qiita.com/rururu_kenken/items/0a7434969ff2c28576eb
https://kubernetes.io/ja/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

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