環境準備#
仮想マシンに三台の centos 7.x オペレーティングシステムをインストールします。
システム名と IP アドレスを設定します(同じネットワークセグメント):
役割 | IP |
---|---|
master | 192.168.66.100 |
node1 | 192.168.66.101 |
node2 | 192.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
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
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
成功メッセージが表示されるのを待ちます。
次に、master ノードで表示されたコマンドを入力します。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
master が生成したコードに従って、クラスターに新しいノードを追加します(node1 と node2 での操作)。
node1 と node2 で master で生成された kubeadm join コマンドを実行します:(実際に応じて、以下は著者のマシンのもので、参考用です)。
kubeadm join 192.168.66.100:6443 --token 7fqt6v.729wvdcjmgivns7y \
--discovery-token-ca-cert-hash sha256:ef79029853fa3c5454cbfc5273a636c843db0ab96e4592467b8a1490b6b6d3c6
Master ノードで次のコマンドを実行して状況を確認できます。
kubectl get node
CNI ネットワークプラグインのデプロイ#
上記の状態はまだ NotReady です。次に、ネットワークプラグインを追加して接続を行います。
# 追加
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 状態を確認
kubectl get pods -n kube-system
この時点でまだ running 状態でない pod があります。もう少し待ってから状態を確認し、すべてが running 状態になったら、次のコマンドを実行します。
kubectl get nodes
実行が完了した後、すでに 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 状態が表示されれば、正常に動作しています。
次に、ポートを公開して外部からアクセスできるようにします。
# ポートを公開
kubectl expose deployment nginx --port=80 --type=NodePort
# 外部ポートを確認
kubectl get pod,svc
80 ポートが 30374 に公開されたことが確認できます。
ブラウザで次のアドレスにアクセスします(任意のノードの IP と上記に表示されたポートを追加)。
http://192.168.66.102:30374/
nginx が正常に起動したことが確認できます。