5
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

KubeadmでKubernetesのクラスタ環境をCentOS7.X 上に作る(Single Master)

Last updated at Posted at 2018-02-13

工事中になります。

◆目的/ゴール、やりたい結果

  • kubernetes のクラスタ環境を構築する
  • kubeadm で環境を作る

◆インストール対象バージョン

  • Kubernetes:1.9.X

◆実行環境の整備

※※CentOS をmarketplace から選んでくださーい!!

  • プラットフォーム:AWS
    • Masterノード
      • OS : CentOs7.4
      • スペック:t2.small
      • タグ: Name:k8s-master
      • ホスト名:k8s-master01
    • Workerノード 1号機
      • OS : CentOs7.4
      • スペック:t2.medium
      • タグ: Name:k8s-worker
      • ホスト名:k8s-worker01
    • Workerノード 2号機
      • OS : CentOs7.4
      • スペック:t2.medium
      • タグ: Name:k8s-worker
      • ホスト名:k8s-worker02

Mater ノードは、AWS セキュリティグループを編集し以下ポートの解放
↓インバウンドを編集

プロトコル ポート範囲 説明
TCP 6443 Kubernetes API server
TCP 2379-2380 etcd server client API
TCP 10250 Kubelet API
TCP 10251 kube-scheduler
TCP 10252 kube-controller-manager
TCP 10255 Read-only Kubelet API

Woker ノードは、AWS セキュリティグループを編集し以下ポートの解放
↓インバウンドを編集

プロトコル ポート範囲 説明
TCP 10250 Kubelet API
TCP 10255 Read-only Kubelet API
TCP 30000-32767 NodePort Services

◆Mater ノードの構築

事前準備

SELinux を無効化

/etc/selinux/config
SELINUX=enforcing
↓
SELINUX=disabled

時刻設定

# yum -y install chrony
# systemctl start chronyd.service
# systemctl enable chronyd.service
# chronyc sources

タイムゾーン設定

# timedatectl set-timezone Asia/Tokyo

hostsファイルを編集

/etc/hosts
172.31.XX.XX k8s-master01
172.31.XX.XX k8s-worker01
172.31.XX.XX k8s-worker02

ホスト名 変更

# hostnamectl set-hostname k8s-master01

サーバ再起動

# reboot

Materノードの環境構築

カーネル設定

・カーネルモジュール読み込み

# modprobe br_netfilter
# lsmod |grep  br_netfilter

・カーネルパラメータ 変更

/etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv6.conf.default.router_solicitations = 0
net.ipv6.conf.default.accept_ra_rtr_pref = 0
net.ipv6.conf.default.accept_ra_pinfo = 0
net.ipv6.conf.default.accept_ra_defrtr = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.default.dad_transmits = 0
net.ipv6.conf.default.max_addresses = 1

・設定を反映

# sysctl --system

docker パッケージのインストール

・リポジトリファイル編集

/etc/yum.repos.d/docker.repo
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg

・インストールとサービス起動

# yum -y install docker-engine-17.03.0.ce docker-engine-selinux-17.03.0.ce
# systemctl enable docker.service
# systemctl start docker.service

※2018年2月現在、17.03.0以上は警告が表示される

kubeadm とMaster に必要なパッケージのインストール

・リポジトリファイルの編集

/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
# yum install -y kubelet kubeadm flannel
# systemctl enable kubelet && systemctl start kubelet

※この時点では、サービスは上がらなくてもOK

cgroupドライバを変更する

/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
↓
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"
# systemctl daemon-reload
# systemctl restart kubelet

kubeadmを使ったMasterノードの構築

kubeadm init --apiserver-advertise-address=172.31.XX.XX --pod-network-cidr=10.244.0.0/16

※apiserver-advertise-addressにmaster のIPアドレスを書く必要あり!
※flannel ネットワークを使う場合、pod-network-cidr指定する必要あり!

成功したら、コンソールに表示される「kubeadm join --token **** 」の一文をメモっておく
※※※※ Sample ※※※※※※※※※※※※
kubeadm join --token xxxxxx.8f60cbe6c2e49xxx 172.31.XX.XX:6443 --discovery-token-ca-cert-hash sha256:963f0fb2ec45588c26a1ab80a67576d29acf1e9d1c601674a7b6091e3533142f
※※※※※※※※※※※※※※※※

API Server接続用設定を作成

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

◆Woker ノードの構築

事前準備

SELinux を無効化

/etc/selinux/config
SELINUX=enforcing
↓
SELINUX=disabled

時刻設定

# yum -y install chrony
# systemctl start chronyd.service
# systemctl enable chronyd.service
# chronyc sources

タイムゾーン設定

# timedatectl set-timezone Asia/Tokyo

hostsファイルを編集

/etc/hosts
172.31.XX.XX k8s-master01
172.31.XX.XX k8s-worker01
172.31.XX.XX k8s-worker02

ホスト名 変更

# hostnamectl set-hostname k8s-workerXX

サーバ再起動

# reboot

Workerノード環境構築

カーネル設定

・カーネルモジュール読み込み

# modprobe br_netfilter
# lsmod |grep  br_netfilter

・カーネルパラメータ 変更

/etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv6.conf.default.router_solicitations = 0
net.ipv6.conf.default.accept_ra_rtr_pref = 0
net.ipv6.conf.default.accept_ra_pinfo = 0
net.ipv6.conf.default.accept_ra_defrtr = 0
net.ipv6.conf.default.autoconf = 0
net.ipv6.conf.default.dad_transmits = 0
net.ipv6.conf.default.max_addresses = 1

・設定を反映

# sysctl --system

docker パッケージのインストール

・リポジトリファイル編集

/etc/yum.repos.d/docker.repo
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg

・インストールとサービス起動

# yum -y install docker-engine-17.03.0.ce docker-engine-selinux-17.03.0.ce
# systemctl enable docker.service
# systemctl start docker.service

※2018年2月現在、17.03.0以上は警告が表示される

kubeadm とWokerに必要なパッケージのインストール

・リポジトリファイルの編集

/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
# yum install -y kubelet kubeadm flannel
# systemctl enable kubelet && systemctl start kubelet

※この時点では、サービスは上がらなくてOK

cgroupドライバを変更する

/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd"
↓
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"
# systemctl daemon-reload
# systemctl restart kubelet

kubeadmコマンドを使って、クラスタに参加

※メモにとっておいたjoin コマンドを実行
※これはサンプルです。

# kubeadm join --token xxxxxx.1f803ac4fac16xxx 172.31.XX.XX:6443 --discovery-token-ca-cert-hash sha256:b57cae62551b3cf2d24d481926dcea4d9808ceca0be2bc2cc607532c5f70373d

API Server 接続用設定を作成

# mkdir -p $HOME/.kube
$HOME/.kube/config
※master の$HOME/.kube/configの記載をコピー
# chown $(id -u):$(id -g) $HOME/.kube/config

◆ここで再び Master ノードで作業

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

◆確認作業

# kubectl get pods --all-namespaces -o wide

以下の様に必要な台数が、STTUS Runningで起動してる事を確認
etcd * 1
kube-apiserve * 1
kube-controller-manager * 1
kube-dns * 3
kube-flannel-ds * 2
kube-proxy * 2
kube-scheduler * 1

【コマンド結果】

NAMESPACE     NAME                                   READY     STATUS    RESTARTS   AGE       IP              NODE
kube-system   etcd-k8s-master01                      1/1       Running   0          1h        172.31.XX.XX   k8s-master01
kube-system   kube-apiserver-k8s-master01            1/1       Running   0          1h        172.31.XX.XX   k8s-master01
kube-system   kube-controller-manager-k8s-master01   1/1       Running   0          1h        172.31.XX.XX   k8s-master01
kube-system   kube-dns-6f4fd4bdf-6p8j6               3/3       Running   0          1h        10.244.XX.XX   k8s-worker01
kube-system   kube-flannel-ds-nd6md                  1/1       Running   0          1h        172.31.XX.XX   k8s-worker01
kube-system   kube-flannel-ds-xhfzj                  1/1       Running   0          1h        172.31.XX.XX   k8s-master01
kube-system   kube-proxy-qv2xl                       1/1       Running   0          1h        172.31.XX.XX   k8s-worker01
kube-system   kube-proxy-s8qtt                       1/1       Running   0          1h        172.31.XX.XX   k8s-master01
kube-system   kube-scheduler-k8s-master01            1/1       Running   0          1h        172.31.XX.XX   k8s-master01
5
10
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
5
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?