# Kubernetes 導入 with Amazon Linux 2

## Kubernetes 導入 with Amazon Linux 2

## 構成

マスターノード + 1台ワーカーノード

## マスターノード

初期設定

```
$ ssh -i ~/.ssh/id_rsa ec2-user@<public ip>
$ sudo hostnamectl set-hostname 'k8s-master'
$ sudo vim /etc/hosts
$ sudo vim /etc/cloud/cloud.cfg
$ sudo reboot
```

/etc/cloud/cloud.cfg には以下を追記

```
preserve_hostname: true
```

/etc/hosts には以下を追記

```
172.31.27.122  k8s-master
172.31.22.36   worker-node1
```

Docker のインストール

```
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ sudo yum install --setopt=obsoletes=0 docker-ce-17.03.2.ce-1.el7.centos.x86_64    docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch
$ sudo systemctl enable docker && sudo systemctl start docker
```

Kubelet, Kubeadm, Kubectl のインストール

```
$ setenforce 0
$ sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/sysconfig/selinux
$ vi /etc/sysconfig/selinux
$ vim /etc/yum.repos.d/kubernetes.repo 
$ yum install -y kubelet kubeadm kubectl
```

/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=0
gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
```

IPVS によるロードバランシングに必要なモジュールの読み込み

```
$ modprobe -v ip_vs
$ modprobe -v ip_vs_rr
$ modprobe -v ip_vs_wrr
$ modprobe -v ip_vs_sh
```

Kubernetes Master の作成

```
$ swapoff -a 
$ kubeadm init
```

kubeadm init 実行時に最後に出力される kubeadm コマンドをコピーしておく。

```
kubeadm join 172.31.27.122:6443 --token xxxxxxxxxxxxxxxxxxxxxx --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```

設定ファイルの準備とノードの作成

```
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ export kubever=$(kubectl version | base64 | tr -d '\n')
$ kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"
```

正常に設定がされていることを確認。

```
[root@k8s-master ~]# kubectl get nodes
NAME         STATUS    ROLES     AGE       VERSION
k8s-master   Ready     master    2m        v1.11.1
```

## ワーカーノード

/etc/hosts と /etc/yum.repos.d/kubernetes.repo の内容はマスターノードと同様。

```
$ sudo hostnamectl set-hostname 'worker-node1'
$ sudo vim /etc/hosts
$ sudo sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/sysconfig/selinux
$ setenforce 0
$ sudo vim /etc/yum.repos.d/kubernetes.repo
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ sudo yum install -y kubelet kubeadm kubectl
$ systemctl restart docker && systemctl enable docker
$ sudo systemctl restart docker && systemctl enable docker
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum makecache fast
$ sudo yum remove docker docker-common docker-selinux docker-engine
$ sudo yum install docker-ce
$ sudo yum install --setopt=obsoletes=0    docker-ce-17.03.2.ce-1.el7.centos.x86_64    docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch
$ sudo systemctl enable docker && sudo systemctl start docker
```

Docker がインストールされたことの確認

```
$ docker -v
Docker version 17.03.2-ce, build f5ec1e2
```

kubelet の再起動と自動起動有効 + スワップ領域の無効化

```
$ sudo systemctl restart kubelet && sudo systemctl enable kubelet
$ sudo swapoff -a
```

kubeadm join の際は、マスターはTCP 6443番ポートでアクセスするので、マスターノードの EC2 インスタンスのセキュリティグループのインバウンドで許可しておく。

```
$ sudo kubeadm join 172.31.27.122:6443 --token xxxxxxxxxxxxxxxxxxxxxxx --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```

マスターからノードの状況確認。正常にインストールされている。

```
[ec2-user@k8s-master ~]$ sudo kubectl get nodes
NAME           STATUS    ROLES     AGE       VERSION
k8s-master     Ready     master    41m       v1.11.1
worker-node1   Ready     <none>    19m       v1.11.1
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hayashier.gitbook.io/article/kubernetes/kubernetes-get-started-with-amazonlinux2.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
