工事中になります。
◆目的/ゴール、やりたい結果
- 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
- Masterノード
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 を無効化
SELINUX=enforcing
↓
SELINUX=disabled
時刻設定
# yum -y install chrony
# systemctl start chronyd.service
# systemctl enable chronyd.service
# chronyc sources
タイムゾーン設定
# timedatectl set-timezone Asia/Tokyo
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
・カーネルパラメータ 変更
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 パッケージのインストール
・リポジトリファイル編集
[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 に必要なパッケージのインストール
・リポジトリファイルの編集
[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ドライバを変更する
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 を無効化
SELINUX=enforcing
↓
SELINUX=disabled
時刻設定
# yum -y install chrony
# systemctl start chronyd.service
# systemctl enable chronyd.service
# chronyc sources
タイムゾーン設定
# timedatectl set-timezone Asia/Tokyo
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
・カーネルパラメータ 変更
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 パッケージのインストール
・リポジトリファイル編集
[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に必要なパッケージのインストール
・リポジトリファイルの編集
[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ドライバを変更する
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
※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