概要
過去に minikube を使った k8s の構築や lxd を使った k8s の構築を行いました
今回はもう少し進んで本格的な k8s クラスタを構築してみました
Master ノード 1 台、Worker ノード 1 台の構成です
なお使用する構築ツールは kubeadm になります
環境
- Ubuntu 16.04
- docker 18.06.1-ce
- kubeadm, kubectl, kubelet v1.11.2
Master ノード構築
docker install
apt -y update
apt -y install apt-transport-https software-properties-common curl
curl -s https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
apt -y update
apt -y install docker-ce docker-ce-cli containerd.io
kubeadm, kubelet, kubectl install
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
apt -y update
apt-get install -y kubeadm kubelet kubectl
クラスタ初期化
swapoff -a
kubeadm init --apiserver-advertise-address=116.118.227.170 --pod-network-cidr=10.244.0.0/16
ここで表示される kubeadm join
コマンドはメモしておきましょう
pod-network-cidr
は flannel を使用するので指定が必須です
操作用のユーザ作成
adduser hawk
usermod -aG sudo hawk
su - hawk
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
flannel 構築
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
操作用ユーザで行います
Worker ノード構築
docker install
apt -y update
apt -y install apt-transport-https software-properties-common curl
curl -s https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
apt -y update
apt -y install docker-ce docker-ce-cli containerd.io
kubeadm, kubelet, kubectl install
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
apt -y update
apt-get install -y kubeadm kubelet kubectl
クラスタ join
swapoff -a
hostnamectl set-hostname node1
kubeadm join 116.118.227.170:6443 --token p06lq6.17gtmq109vk7gxuf --discovery-token-ca-cert-hash sha256:97f82e93d768f0f3ca9494d8d1e3ee6bb5409b3d8e9a3e2b8c371bb57889a6e8
先程 kubeadm init
時にメモした join コマンドを使います
Master と同じホスト名だと join できないので変更します
動作確認
Master ノードに作成した操作用ユーザで行います
kubectl get node
NAME STATUS ROLES AGE VERSION
node1 Ready <none> 1m v1.11.2
ubuntu Ready master 32m v1.11.2
ついでにアプリも動かしてみます
kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4
kubectl expose deployment hello-node --type=NodePort --port=8080
あとは kubectl get pod
でコンテナが作成されたらアクセスすれば OK です
アクセス先は NodePort を使っているので、IP が Worker ノードのパブリック IP でポートが NodePort 用のポートです
kubectl describe service hello-node
Name: hello-node
Namespace: default
Labels: app=hello-node
Annotations: <none>
Selector: app=hello-node
Type: NodePort
IP Families: <none>
IP: 10.100.104.233
IPs: 10.100.104.233
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
NodePort: <unset> 32436/TCP
Endpoints: 192.168.1.3:8080
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
192.168.1.3:8080
がアクセスポートになります
Tips
クラスタからノードを切り離す場合は以下でできます
kubeadm reset
全リソースを取得する
kubectl get all
トラブルシューティング
うまくクラスタに join できない場合は FW (ufw) の設定などを確認してみてください
swap に関して怒られた場合は上記の手順にあるように swapoff -a
してみてください
running with swap on is not supported. Please disable swap
コンテナがうまく起動しない場合は
kubectl get pods
kubectl describe pod hello-node-546c7dcc87-lp5j7
kubectl logs hello-node-546c7dcc87-lp5j7
などでコンテナの状況を確認してみましょう
最後に
Ubuntu16.04 上で Master 1 台+Worker 1 台の kubernetes クラスタを構築してみました
結構簡単にできたのでビックリです
構築用のドキュメントが乱立しており大変なイメージがあったのですが、
あとは同じように Worker ノードを増やしていけば簡単にクラスタを拡張することができます
本記事は kubeadm を使った構築方法になります
返信削除