banner
云野阁

云野阁

闲云野鹤,八方逍遥

Kubeadm方式でK8Sクラスターを構築する

環境準備#

仮想マシンに三台の centos 7.x オペレーティングシステムをインストールします。

システム名と IP アドレスを設定します(同じネットワークセグメント):

役割IP
master192.168.66.100
node1192.168.66.101
node2192.168.66.102

三台のマシンで実行するコマンド:(xshell を使用してコマンドを実行する方が便利です)

# ファイアウォールを停止
systemctl stop firewalld
systemctl disable firewalld

# selinuxを永久に無効化
sed -i 's/enforcing/disabled/' /etc/selinux/config

# swapを永久に無効化
sed -ri 's/.*swap.*/#&/' /etc/fstab

# hostsを追加
cat >> /etc/hosts << EOF
192.168.66.100 master
192.168.66.101 node1
192.168.66.102 node2
EOF

# ブリッジのIPv4トラフィックをiptablesのチェーンに渡す
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 有効化
sysctl --system  

# 時間同期
yum install ntpdate -y
ntpdate time.windows.com

image-20230516173905682

Docker のインストール(三台のマシンすべてにインストールが必要)#

Docker の Aliyun yum リポジトリを設定します。

cat >/etc/yum.repos.d/docker.repo<<EOF
[docker-ce-edge]
name=Docker CE Edge - \$basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/\$basearch/edge
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF

yum を使用して docker をインストールします。

# yumでインストール
yum -y install docker-ce

# dockerのバージョンを確認
docker --version  

# dockerを起動
systemctl enable docker
systemctl start docker

image-20230516180634916

docker のイメージソースを設定します。

cat >> /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF

docker を再起動します。

systemctl restart docker

Kubernetes ソフトウェアリポジトリの追加#

yum の k8s ソフトウェアリポジトリを設定します。

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

kubeadm、kubelet、kubectl のインストール#

バージョンが頻繁に更新されるため、ここではバージョン番号を指定してデプロイします:

# kubelet、kubeadm、kubectlをインストールし、バージョンを指定
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
# 起動時に自動起動を設定
systemctl enable kubelet

master ノードのデプロイ#

master ノードで実行します(ここでの 192.168.66.100 は著者の master マシンの IP で、変更が必要です)。

kubeadm init --apiserver-advertise-address=192.168.66.100 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12  --pod-network-cidr=10.244.0.0/16

image-20230516181339201

成功メッセージが表示されるのを待ちます。

image-20230516181608215

次に、master ノードで表示されたコマンドを入力します。

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

image-20230516181720076

master が生成したコードに従って、クラスターに新しいノードを追加します(node1 と node2 での操作)。

node1 と node2 で master で生成された kubeadm join コマンドを実行します:(実際に応じて、以下は著者のマシンのもので、参考用です)。

image-20230516182024786

kubeadm join 192.168.66.100:6443 --token 7fqt6v.729wvdcjmgivns7y \
    --discovery-token-ca-cert-hash sha256:ef79029853fa3c5454cbfc5273a636c843db0ab96e4592467b8a1490b6b6d3c6 

Master ノードで次のコマンドを実行して状況を確認できます。

kubectl get node

image-20230516183426649

CNI ネットワークプラグインのデプロイ#

上記の状態はまだ NotReady です。次に、ネットワークプラグインを追加して接続を行います。

# 追加
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

image-20230516183609956

# 状態を確認 
kubectl get pods -n kube-system

image-20230516183655302

この時点でまだ running 状態でない pod があります。もう少し待ってから状態を確認し、すべてが running 状態になったら、次のコマンドを実行します。

kubectl get nodes

image-20230516184424536

実行が完了した後、すでに Ready 状態になっていることがわかります。まだ NotReady 状態のノードがある場合は、もう少し待ってからkubectl get pods -n kube-systemコマンドを実行し、状態が running であれば、再度kubectl get nodeを実行して確認できます。

Kubernetes クラスターのテスト#

Kubernetes クラスター内に pod を作成し、正常に動作しているか確認します:

# nginxをダウンロード 
kubectl create deployment nginx --image=nginx
# 状態を確認
kubectl get pod

Running 状態が表示されれば、正常に動作しています。

image-20230516185059052

次に、ポートを公開して外部からアクセスできるようにします。

# ポートを公開
kubectl expose deployment nginx --port=80 --type=NodePort
# 外部ポートを確認
kubectl get pod,svc

80 ポートが 30374 に公開されたことが確認できます。

image-20230516185150167

ブラウザで次のアドレスにアクセスします(任意のノードの IP と上記に表示されたポートを追加)。

http://192.168.66.102:30374/

nginx が正常に起動したことが確認できます。

image-20201113204056851

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。