Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@rururu_kenken

kubeadmでAmazon Linux2にKubernetes1.18

More than 1 year has passed since last update.

kubeadmでAmazon Linux2にKubernetes1.17を入れる場合はこちら
kubeadmでAmazon Linux2にKubernetes1.16を入れる場合はこちら
kubeadmでAmazon Linux2にKubernetes1.15を入れる場合はこちら

Master Node

EC2   OS Kubernetes Docker ホスト名
t3.small  Amazon Linux2 1.18.0 19.03.6-ce k8s-master

2CPU、メモリ2GB以下の場合、kubeadm init実行時にエラーになります。
ディスクサイズはデフォルトの8G
Master NodeとWorker Nodeは同じVPC
Master NodeのIPアドレスは172.31.31.214

Worker Node

EC2   OS Kubernetes Docker ホスト名
t3.small Amazon Linux2 1.18.0 19.03.6-ce k8s-worker

ディスクサイズは8G
Master NodeとWorker Nodeは同じVPC
Worker NodeのIPアドレスは172.31.31.203

SELinux設定確認

getenforce

# 無効になっている
Disabled

ホスト名の設定

sudo hostnamectl set-hostname k8s-master

hostファイル編集

sudo vi /etc/hosts

以下の設定を追加

/etc/hosts
172.31.31.214 k8s-master
172.31.31.203 k8s-worker

swap確認

free

# ないので何もしない。ある場合は「swapoff -a」
              total        used        free      shared  buff/cache   available
Mem:        2002032       71720     1567924         384      362388     1786060
Swap:             0           0           0

Dockerインストール・設定

sudo yum install -y docker

# dockerサービス起動 / 自動起動有効化
sudo systemctl start docker && sudo systemctl enable docker

sudo docker info | grep -i version

# 実行結果
 Server Version: 19.03.6-ce
 containerd version: ff48f57fc83a8c44cf4ad5d672424a98ba37ded6
 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
 init version: fec3683
 Kernel Version: 4.14.171-136.231.amzn2.x86_64

# ログインしているユーザーをdockerグループに追加
sudo usermod -a -G docker $USER

# 確認コマンド
cat /etc/group | grep docker

# 実行結果
docker:x:993:ec2-user

# ログアウトして、すぐに再ログイン
exit

# cgroupdriverをsystemdに設定など
sudo tee /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

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo systemctl daemon-reload
sudo systemctl restart docker

# 設定確認
docker info | grep -i driver

# 実行結果
 Storage Driver: overlay2
 Logging Driver: json-file
 Cgroup Driver: systemd

その他の設定

# sysctlでネットワークをブリッジできるようする
sudo tee /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

# カーネルパラメータを手動で反映
sudo sysctl --system

kubelet、kubeadm、kubectlインストール

「repo_gpgcheck=1」は「repo_gpgcheck=0」にする
Got "repomd.xml signature could not be verified for kubernetes" error when installing Kubernetes from yum repo on Amazon Linux 2 #60134

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

sudo yum install -y kubelet-1.18.0-0.x86_64 kubeadm-1.18.0-0.x86_64 kubectl-1.18.0-0.x86_64 --disableexcludes=kubernetes

kubelet 起動

sudo systemctl enable kubelet && sudo systemctl start kubelet

Master の初期化

# WARNING でるのでtcインストール
# [preflight] Running pre-flight checks
#   [WARNING FileExisting-tc]: tc not found in system path
sudo yum install -y tc

# Calicoを使うので「--pod-network-cidr 192.168.0.0/16」を指定
sudo kubeadm init --pod-network-cidr 192.168.0.0/16 

トークンには有効期限があり、通常は24時間で利用できなくなる。
トークンが失効した場合や分からなくなった場合、マスターノードで「kubeadm token create --print-join-command」コマンドを実行するとトークンが再生成されて表示される。

kubectl 接続設定

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

# 実行結果
NAME                 STATUS    MESSAGE             ERROR
scheduler            Healthy   ok                  
controller-manager   Healthy   ok                  
etcd-0               Healthy   {"health":"true"} 

kubectl get pod -A

# 実行結果
NAMESPACE     NAME                                 READY   STATUS    RESTARTS   AGE
kube-system   coredns-66bff467f8-9v26n             0/1     Pending   0          102s
kube-system   coredns-66bff467f8-tf8vz             0/1     Pending   0          102s
kube-system   etcd-k8s-master                      1/1     Running   0          118s
kube-system   kube-apiserver-k8s-master            1/1     Running   0          118s
kube-system   kube-controller-manager-k8s-master   1/1     Running   0          118s
kube-system   kube-proxy-w764p                     1/1     Running   0          102s
kube-system   kube-scheduler-k8s-master            1/1     Running   0          118s

Calico

kubectl apply -f https://docs.projectcalico.org/v3.13/manifests/calico.yaml

kubectl get pod -A

# 実行結果
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system   calico-kube-controllers-5b8b769fcd-b5w75   1/1     Running   0          40s
kube-system   calico-node-7x8x8                          1/1     Running   0          40s
kube-system   coredns-66bff467f8-9v26n                   1/1     Running   0          2m53s
kube-system   coredns-66bff467f8-tf8vz                   1/1     Running   0          2m53s
kube-system   etcd-k8s-master                            1/1     Running   0          3m9s
kube-system   kube-apiserver-k8s-master                  1/1     Running   0          3m9s
kube-system   kube-controller-manager-k8s-master         1/1     Running   0          3m9s
kube-system   kube-proxy-w764p                           1/1     Running   0          2m53s
kube-system   kube-scheduler-k8s-master                  1/1     Running   0          3m9s
kubectl get node

# 実行結果
NAME         STATUS   ROLES    AGE     VERSION
k8s-master   Ready    master   3m53s   v1.18.0

Worker Node

以下はMaster Nodeの手順を参照

SELinux設定確認
ホスト名の設定・・・sudo hostnamectl set-hostname k8s-worker
hostファイル編集
swap確認
Dockerインストール・設定
その他設定
kubelet、kubeadm、kubectlインストール
kubelet 起動

クラスタに参加

# WARNING でるのでtcインストール
sudo yum install -y tc

# 「kubeadm token create --print-join-command」はMaster Nodeで実行
kubeadm token create --print-join-command

# 長いので「・・・」で省略
sudo kubeadm join マスターノードのIPアドレス:6443 --token ・・・

トークンには有効期限があり、通常は24時間で利用できなくなる。
トークンが失効した場合や分からなくなった場合、マスターノードで「kubeadm token create --print-join-command」コマンドを実行するとトークンが再生成されて表示される。

Master Node

kubectl コマンドで Node と Pod の状態を確認

kubectl get node

# 実行結果
NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   32m   v1.18.0
k8s-worker   Ready    <none>   21s   v1.18.0

Redisデプロイ・動作確認

vi redis.yaml
redis.yaml
apiVersion: v1
kind: Service
metadata:
  name: redis-svc
spec:
  ports:
    - port: 6379
      targetPort: 6379
  selector:
    app: redis
  clusterIP: None
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: redis.config
data:
  redis.conf: |
    requirepass password
    bind 0.0.0.0
---
apiVersion: apps/v1
kind: Deployment
metadata:
  # Deploymentの名前。Namespace内ではユニークである必要があります
  name: redis
spec:
  selector:
    matchLabels:
      app: redis
  # レプリカ数の指定
  replicas: 1
  # Podのテンプレート(PodTemplate)
  template:
    metadata:
      labels:
        # ラベル指定は必須
        app: redis
    spec:
      containers:
        - name: redis
          image: redis:5.0.8
          command: 
            - "redis-server"
            - "/redis-master/redis.conf"
          ports:
            - name: redis
              containerPort: 6379
          volumeMounts:
            - name: data
              mountPath: /redis-master-data
            - name: config
              mountPath: /redis-master
      volumes:
        - name: data
          emptyDir: {}
        - name: config
          configMap:
            name: redis.config
kubectl apply -f redis.yaml
kubectl run -it redis-cli --rm --image redis:5.0.8 --restart=Never -- bash
If you don't see a command prompt, try pressing enter.
root@redis-cli:/data# redis-cli -c -h redis-svc -p 6379 -a password
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
redis-svc:6379> set a 1
OK
redis-svc:6379> get a
"1"
redis-svc:6379> exit
root@redis-cli:/data# exit

Master 以外のノードに Role 設定

kubectl label node k8s-worker node-role.kubernetes.io/worker=

kubectl get node

# 実行結果
NAME         STATUS   ROLES    AGE     VERSION
k8s-master   Ready    master   35m     v1.18.0
k8s-worker   Ready    worker   3m51s   v1.18.0

参考URL

kubeadmのインストール

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?