ローカル仮想マシン上に3つのノードが構築され、すべてUbuntuで動作しています。主に自己記録と後で使用するために便利です。
利用可能なプロテスト
ビルド環境を初期化してマスターノードを初期化し、クラスターに他のノードを追加 *****
マスターノードと他のノードでdockerとk8sを構成しますが、マスターノードを初期化し、ネットワークプラグインを追加する必要があります。
最初に、ファイアウォールをオフにし、スワップをオフにし、selinuxと他の準備をオフにする必要があります。
1:ファイアウォール
sudo ufw disableをオフにする
2:スワップを閉じる
sudo swapoff -a #这个只是暂时关闭,重启后失效
sudo vim /etc/fstab #通过修改配置文件,彻底关闭
# 注释掉swapfile这一行
3:selinuxを閉じる
sudo vim /etc/selinux/config #通过修改配置文件
SELINUX=disabled
4:ホスト名を認識される名前に変更します。コマンドラインまたは自分で設定できます。オプション。
5:vim、curlなどの基本的なツールをインストールします。
sudo apt update && \
sudo apt -y upgrade && \
sudo apt install -y vim \
curl \
apt-transport-https \
ca-certificates \
software-properties-common
6:DNSサービスを暫定的に変更します。当面はこれを設定しないでください
$ sudo apt install -y unbound
$ sudo systemctl stop systemd-resolved
$ sudo systemctl disable systemd-resolved
$ sudo rm -rf /etc/resolv.conf
$ sudo vim /etc/NetworkManager/NetworkManager.conf
# 在[main]下面添加
dns=unbound
# 重启生效
$ reboot
7:これを一時的に設定しないようにパケット転送を構成します
sudo vim /etc/sysctl.conf #修改配置文件,往文件中添加东西
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
構成を有効にするが、再起動後は無効にする
sudo modprobe br_netfilter
sudo sysctl -p
起動時に自動的にbr_netfilterをロードするように設定
sudo vim /etc/init.d/load_br_netfilter.sh
#!/bin/bash
### BEGIN INIT INFO
# Provides: svnd.sh
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the svnd.sh daemon
# Description: starts svnd.sh using start-stop-daemon
### END INIT INFO
sudo modprobe br_netfilter
sudo chmod 775 /etc/init.d/load_br_netfilter.sh
sudo update-rc.d load_br_netfilter.sh defaults 90
ブートをキャンセルする場合は、モジュールを自動的にロードします
$ sudo update-rc.d -f load_br_netfilter.sh remove
最初のステップ:Dockerを最初にインストールする
1:存在する可能性のある古いバージョンを最初にアンインストールする
sudo apt-get remove docker docker-engine docker-ce docker.io
2:aptパッケージインデックスを更新します。
sudo apt-get update
3:aptがHTTPS経由でリポジトリを使用できるように、次のパッケージをインストールします
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
4:公式のDocker GPGキーを追加します。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
5:次のコマンドを使用して、安定したリポジトリを設定します。
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
6:aptパッケージインデックスを更新します。
sudo apt-get update
7:利用可能なバージョンのリスト:
apt-cache madison docker-ce
8:指定されたバージョンをインストールします
sudo apt-get install docker-ce=18.06.3~ce~3-0~ubuntu
9:Dockerステータスが開始されているかどうかを確認する
systemctl status docker
開始されていない場合は、開始します
sudo systemctl start docker
ドッカーを停止
sudo systemctl stop docker
Dockerが自動的に起動するように設定する
systemctl enable docker.service
10:正常であることを確認します
sudo docker run hello-world
ステップ2:k8s環境を構築する
1:ソースを構成する
sudo curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
sudo tee /etc/apt/sources.list.d/kubernetes.list <<-'EOF'
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
EOF
インデックスを更新
$ sudo apt update
利用可能なバージョンを表示
apt-cache madison kubeadm
2:指定されたバージョンをインストールする
sudo apt install -y kubelet=1.15.0-00 kubeadm=1.15.0-00 kubectl=1.15.0-00
sudo apt-mark hold kubelet=1.15.0-00 kubeadm=1.15.0-00 kubectl=1.15.0-00
3:自動的に起動するようにブートを設定する
sudo systemctl enable kubelet && sudo systemctl start kubelet
4:マスターノードを初期化する
これは使用できます
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.15.0 --pod-network-cidr=10.244.0.0/16
そうでない場合は、これを試してください
kubeadm init --kubernetes-version=1.15.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
5:トークン情報を再生成します。これは通常、12時間後に期限切れになる必要があるときに実行されます。
kubeadm token create --print-join-command
6:CNIフランネルネットワークプラグインをインストールします。ネットワークプラグインをインストールしない場合、マスターノードのステータスはNoReadyです。
ネットワークプラグインをインストールする前に、それを設定する必要があります。それ以外の場合、次のように報告されます:サーバーlocalhost:8080への接続が拒否されました
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
この操作が実行されない場合、kubectl getノードもエラーを報告します
これは使用できます
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
使えない場合は、こちらをお試しください
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
これまでのところ、k8s環境は基本的にセットアップされており、マスターノードも初期化されています。次のステップは、他のノードをクラスターに参加させることです。
ノードが再起動したら、必ずスワップを閉じ、resetコマンドを実行してから、結合クラスターに移動してください。
7:マスターノードによって生成されたトークンコマンドを他のノードで実行します。
ここで注意する必要があります。マスターノードに加えて、dockerとkubectl、kubeadm、kubeletをインストールする必要があります。他のノードもインストールする必要があり、同じようにインストールする必要があります。
例:これを他のノードで実行します
kubeadm join 192.168.172.134:6443 --token 1ly6ta.omqv3bkurfomxw0j --discovery-token-ca-cert-hash sha256:d65642726224dfdf52ccd8af1e9fc1ca30ad201e4b03a14ebd327d7f60abf1c8
8:以前にクラスターに参加したノード。後でクラスターに再参加する場合は、
kubeadm reset
コマンドを実行する必要があります。そうしないと、エラーが発生します。
注:いくつかの一般的なエラーと解決策を覚えておいてください。エラーを報告する場合は、コンソールから報告されたエラーの読み方を学ぶ必要があります。!!!!
1)新しく追加されたノードのステータスはNotReadyです。解決策は
、各ノードノードのデーモン、Docker、およびkuberletを再起動します。
systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet
最後の実行
kubeadm reset
最後に、クラスター
に再び参加して解決します!
2)k8sはノードを削除します
kubectl delete node nodename
実際、このコマンドは汎用的であり、任意のタイプを削除できます。
kubectl delete type typename
typeは、ノード、ポッド、rs、rc、デプロイメント、サービスなどのリソースタイプです。typenameは、このリソースの名前です。
注:将来どのノードであっても、再起動されている限り、マスターはdockerとkubeletのステータスが正常かどうかを確認し、kubectl get nodesを実行し
てノード情報を表示します。他のノードは、Dockerが正常かどうかを確認します。次に、問題が発生した場合、クラスターに再参加するには、最初にリセットする必要があります。kubeadmreset
Ubuntuでは、ターミナルを介して構成ファイルを変更するために一般的に使用されるいくつかの操作:
1:vimコマンドを使用して構成ファイルを入力します。保存して終了する場合は、esc、wq、保存して終了します。
2:設定で中国語、時間、ロック画面なしを設定します。
クラスターにシンプルなアプリケーションをデプロイする ******
nigxのシンプルなデプロイメント
1:マスターノードにデプロイメントを作成する
kubectl create deployment nginx --image=nginx
見る
kubectl get deployments
2:サービスを作成する
kubectl create service nodeport nginx --tcp 80:80
見る
kubectl get svc
3:スレーブノードで次のコマンドを実行して、nginxが正常にデプロイされているかどうかを確認します。
curl localhost:30601
#ここでのポート番号は、展開後の実際のポート番号によって異なります
または
curl kube-slave:30601
#ここでkube-slaveはノードのホスト名で、node1、node2 ...
ブラウザを開いて、次のように入力します。localhost:ポート番号またはノードホスト名:ポート番号。通常、nigxページにアクセスします。