私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
K8s オフライン展開
k8s オフライン展開
詳細については、記事「Docker のオフライン インストールとバックエンド プロジェクトのオフライン パッケージ化」を参照してください。
https://blog.csdn.net/qq_45371023/article/details/140279746?spm=1001.2014.3001.5501
使用されるすべてのファイルは次の場所にあります。
リンク: https://pan.baidu.com/s/10cb-dXkgdShdjPEBCyvTrw?pwd=fpuy
抽出コード: fpuy
1. cri_dockerdをインストールする
rpm -ivh cri-dockerd-0.3.9-3.el8.x86_64.rpm
2. システムデーモンをリロードします → cri-dockerd が自動的に起動するように設定します → cri-dockerd を起動します
システムデーモンをリロードする
sudo systemctl daemon-reload
cri-dockerd が自動的に起動するように設定する
sudo systemctl enable cri-docker.socket cri-docker
cri-dockerdを起動する
sudo systemctl start cri-docker.socket cri-docker
sudo systemctl status cri-docker.socket
sudo systemctl status cri-docker
問題: cri-docker の起動に失敗しました
測定:
方法 1: systemctl restart docker # docker を再起動
方法 2: docker をアンインストールして再インストールし、上記の手順を再度実行します。
1.kubectlをインストールする
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
2. インストールが完了したかどうかを確認します
kubectl version --client
3. ポートを開くか、ファイアウォールを閉じます (インストール プロセスをスムーズに行うため)。
ポートを開く(クラウドサーバー)
ポート6443を開く
sudo firewall-cmd --zone=public --add-port=6443/tcp --permanent
ファイアウォールをリロードする
sudo firewall-cmd --reload
開いているポートをすべて表示する
sudo firewall-cmd --zone=public --list-ports
または、ファイアウォール (仮想マシン) をオフにします。
ファイアウォールをオフにする
sudo systemctl stop firewalld
ファイアウォールの自動起動をオフにする
sudo systemctl disable firewalld
4. SELinux を無効にします (コンテナーがシステム リソースにアクセスできることを確認します)。
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
5. kubeadm、kubelet、kubectl をインストールする
3_yum_package の下にある関連するオフライン インストール パッケージを rpm 形式でダウンロードします。このコマンドを使用して、すべての rpm インストール パッケージをディレクトリにインストールします。
cd 3_yum_package && rpm -ivh *.rpm
6. kubelet が自動的に起動するように設定する
sudo systemctl enable --now kubelet
上記の手順を完了すると、次の環境が完成します。
·異なる IP アドレスを持つ 2 つのサーバーまたは仮想マシンは相互に通信し、LAN の状態を維持できます。IP アドレスは 192.168 に設定されます。.34と192.168。.35
·コンテナ ランタイム (Docker+cri_dockerd) が両方のサーバーにインストールされており、kubernetes コンポーネント kubectl、kubeadm、および kubelet がインストールされています。
7. スワップパーティションを閉じます。一時的なシャットダウンと永続的なシャットダウンに分けられます。頻繁にオン/オフが行われるため、永続的なシャットダウンが推奨されます。一方、クラウド環境では、一時的なシャットダウンが推奨されます。
スワップパーティションを一時的に閉じる
swapoff -a
スワップ パーティションを永続的に閉じるには、fstab 内のスワップを含む行をコメント アウトします。
vi /etc/fstab
# /dev/mapper/centos-swap swap スワップ デフォルト 0 0
実際のデプロイメントでは、再起動によって cri-dockerd の状態が変化する可能性がありますが、その理由は、docker を再インストールすることで可能です。 cri-dockerd を実行し、cri-dockerd を起動して cri -dockerd ステータスを正常にします。
リブート
8. k8s オペレーティング環境として runc をインストールします。
runc をインストールする
sudo install -m 755 runc.amd64 /usr/local/bin/runc
# インストールが成功したかどうかを確認する
runc -v
9. Docker と cri-dockerd は国内イメージ アクセラレーションをセットアップします (このフォルダーで使用される次のソフトウェア パッケージの名前にはミラー アドレスがあるため、kubectl がインターネットにソフトウェア パッケージのプルを要求したり、後でローカル ミラーを無視したりしないように、ローカル エリア ネットワーク上でも対応するミラー アクセラレーションを構成することをお勧めします。インストールが完了しました。)
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://tsvqojsz.mirror.aliyuncs.com"]
}
EOF
# 找到第10行
vi /usr/lib/systemd/system/cri-docker.service
# 修改为ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
Docker コンポーネントを再起動します
systemctl daemon-reload && systemctl restart docker cri-docker.socket cri-docker
# Docker コンポーネントのステータスを確認する
systemctl status docker cir-docker.socket cri-docker
10. ホスト名とホストを確認する
マスターノード
ホスト名は k8s-master です
vi /etc/hostname
ドメイン名のマッピングを追加する
echo "192.168.**.35 k8s-slave01">> /etc/hosts
他のノード
ホスト名はk8s-slave01
vi /etc/hostname
ドメイン名のマッピングを追加する
echo "192.168.**.34 k8s-master" >> /etc/hosts
11. IPv4 を転送し、iptables にブリッジ フローを確認させます
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
必要な sysctl パラメータを設定します。このパラメータは再起動後も保持されます。
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
#再起動せずに sysctl パラメータを適用する
sudo sysctl --system
lsmod | grep br_netfilter
lsmod | grep overlay
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward
# init 中に iptables エラーがまだ表示される場合は、次を実行してください。
echo "1">/proc/sys/net/bridge/bridge-nf-call-iptables
echo "1">/proc/sys/net/ipv4/ip_forward
12. マスターノードの初期化
初期化の前に、kubeadm config イメージを通じて初期化に必要な docker イメージを取得する必要があります。
イメージ dockerload -i **.tar をインストールします。
関連するイメージ ファイルは 5_kubeadm-images に存在します。
初期化を実行します。
kubeadm init --node-name=k8s-master list--image-repository=registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock --apiserver-advertise-address=192.168.**.34 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
–image-repository=registry.aliyuncs.com/google_containers # ダウンロードしたコンテナ イメージ ソースを Alibaba Cloud に置き換えます。そうしないと、ネットワーク上の理由によりイメージをプルダウンできず、実行は確実に失敗します。
–cri-socket=unix:///var/run/cri-dockerd.sock # これは、指定されたコンテナー ランタイムです。これは、containerd も Docker のコンポーネントの 1 つであるため、Kubernetes の初期化の実行時に Docker をダウンロードすることになります。複数のコンテナー ランタイム環境が存在することが検出された場合は、手動で 1 つを選択する必要があります。ここでは、containerd が実際には Docker よりもはるかに軽量であることもわかります。
–apiserver-advertise-address=192.168.56.50 # API サーバーのブロードキャスト アドレスをここで選択します。API サーバーを他のノードに設定したくない場合は、別のアドレスに変更しないでください。
–pod-network-cidr=10.244.0.0/16 # ポッド ネットワークで使用できる IP アドレス範囲を指定します。まだ不明な場合は、無視してこの値を使用できます。
–service-cidr=10.96.0.0/12 # サービスの仮想 IP アドレスに追加の IP アドレス セグメントを指定します。まだ不明な場合は、この値をそのまま使用できます。
問題:cordns:v1.10.1 チェックが存在しません。実際、cordns:v1.10.1 はすでに存在しますが、cordns:1.10.1 です。
対策:コードのタグを修正。
docker tag registry.aliyuncs.com/google_containers/coredns:1.10.1 registry.aliyuncs.com/google_containers/coredns:v1.10.1
初期化コマンドを再実行する
kubeadm join の下の情報を記録します。これは、ノード結合に必要です。上記の例に関連する情報は次のとおりです。
kubeadm join 192.168.51.34:6443 --token 1qtv3k.p8tfvdcds6x5ichf
--discovery-token-ca-cert-hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26
忘れた場合は、kubeadm token list を使用してクエリを実行し、トークンは 24 時間存在します。kubeadm token create --print-join-command を再作成し、kubeadm token delete tokenid を使用して削除します。
非rootユーザーは実行してください
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
root ユーザーが直接実行する
一時的に有効になり、再起動すると無効になります。
export KUBECONFIG=/etc/kubernetes/admin.conf
永続的に有効になります。kubeadm restart および init を再度実行した後に、このコマンドを再度実行する必要はありません。
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
永続的に有効なコマンドを実行した後、それを有効にするためにソースを設定する必要があります。
source ~/.bash_profile
設定が有効かどうかを確認する
echo $KUBECONFIG
/etc/kubernetes/admin.conf
13. ネットワークプラグインのインストールと構成
ここでは、flannel を使用して、kube-flannel.yml ファイルをサーバーにダウンロードしてアップロードします。
関連するイメージをサーバーにアップロードしてインストールします。 kube-flannel.yml と画像ファイルは 6_kube-flannel に存在します。
ネットワークカードの問い合わせ
ifconfig
kube-flannel.yml はデフォルトで enp1s0 ネットワーク カードを検索します。この例では、34 ネットワーク カードは enp1s0 であり、35 ネットワーク カードは enp4s0 です。
// 35 の kube-flannel.yml を変更し、-iface=enp0s3 を追加して指定します (ここでの enp0s3 は、上のボックス内の部分など、IP に対応するネットワーク カードです)。パラメータの場所は次のとおりです。
container:
......
command:
- /opt/bin/flanneld
arg:
- --ip-masq
- --kube-subnet-mgr
- --iface=enp4s0
Kubernetes 用のフランネル ネットワーク プラグインの構成
kubectl apply -f /data/k8s/6_kube-flannel/kube-flannel.yml
cat /run/flannel/subnet.env
# そのようなファイルまたはフォルダーがない場合は、手動で作成する必要があります。内容は以下と同じです。
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
14. ノードノードがマスターに参加します
14.1. マスターノードマシンの /etc/kubernetes/admin.conf をスレーブノードマシンにコピーします。
scp /etc/kubernetes/admin.conf 192.168.56.51:/etc/kubernetes/
# 永続的に有効にするには、ここで admin.conf を環境変数に追加することを忘れないでください。
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
コピー中に問題が発生した場合:
192.168.55.187 の ECDSA ホスト キーが変更されたため、厳密なチェックを要求しました。ホスト キーの検証に失敗しました。
修復するには次のステートメントを実行します
ssh-keygen -R 192.168.55.187
14.2. join コマンドを実行します (マスターノードが正常に初期化された後、join コマンドが実行されます)
例えば:
kubeadm は 192.168.51.34:6443 に参加します --token by7t4x.da3f98dzrvjylykz --discovery-token-ca-cert-hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26 --cri-socket unix:///var/run/cri-dockerd.sock
14.3. kubectl get ノードを実行する
k8s クラスターが正常にデプロイされました。 ! !
kubectl ノードを取得する
対策: スワップが閉じているかどうかを確認し、ファイアウォールがポート 6443 を開いているかどうかを確認します。
スワップを閉じる
ファイアウォールを一時的に無効にする
成功
kubectl ノードを取得する
k8s ノードをクラスターに追加した後、ノードのステータスが NotReady であることを確認します。
測定:
systemctl restart kubelet.service
systemctl restart docker.service
kubeletとdockerを再起動します
kubeadm は 192.168.51.34:6443 に参加します --token l2qlvh.and3fnjmzecueu9h --discovery-token-ca-cert-hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26 --cri-socket unix:///var/run/cri-dockerd.sock
k8s クラスターに子ノードを追加すると、初期化タイムアウトが発生します。
測定:
kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock
成功
マスターノードマシンの/etc/kubernetes/admin.confをスレーブノードマシンにコピーします。
scp /etc/kubernetes/admin.conf 192.168.55.187:/etc/kubernetes/
ファイルのコピーが失敗した場合、次のようなエラー メッセージが表示されます。
192.168.55.187 の ECDSA ホスト キーが変更されたため、厳密なチェックを要求しました。
ホストキーの検証に失敗しました。
修復するには次のステートメントを実行します
ssh-keygen -R 192.168.55.187
kubectl delete node k8s-slave01
kubectl delete node k8s-slave02
kubectl delete node k8s-master
スレーブノード
rm -rf /etc/kubernetes/*
kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock
マスターノード
rm -rf /etc/kubernetes/*
rm -rf ~/.kube/*
rm -rf /var/lib/etcd/*
kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock
必要に応じて、k8s クラスターを再初期化します。
kubeadm init --node-name=k8s-master --image-repository=registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock --apiserver-advertise-address=192.168.51.34 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
マスターノード
kubectl apply -f /data/k8s/6_kube-flannel/kube-flannel.yml
kubectl get pod -A
マスターノード
scp /etc/kubernetes/admin.conf 192.168.51.35:/etc/kubernetes/
scp /etc/kubernetes/admin.conf 192.168.51.36:/etc/kubernetes/
スレーブノード
kubeadm join 192.168.51.34:6443 --token 1k9kdy.dvn2qbtd7rjar1ly
--discovery-token-ca-cert-hash sha256:ff90d8ed41ae1902a839194f179a1c3ba8374a5197ea3111e10e5ca1c09fa442 --cri-socket unix:///var/run/cri-dockerd.sock
kubectl get pod -A
kubectl get nodes