単一マスターを使用して K8S クラスターをインストールする方法を段階的に説明します。

CKA 学習パス


クラウドネイティブ時代、一緒に学びましょう

記事ディレクトリ

  • システム環境
  • サーバー計画
  • 1. 事前設定
  • 2. Docker と kubeadm/kubelet をインストールする
  • 3. K8sMaster ノードのデプロイ
  • 4. K8sNodeノードに参加します
  • 5. コンテナネットワーク(CNI)の展開
  • 6. ダッシュボードの展開

システム環境:

CentOS 7.9
ドッカー 20-ce
Kubernetes 1.23

サーバー計画:

192.168.1.186 k8sマスター
192.168.1.187 k8s-node1
192.168.1.188 k8s-node2

1. 事前設定

1. yum update -y を実行してサーバーシステムを最新の状態に更新します。

yum update -y

実行が成功すると、期待される結果は次のようになります。

 2. システム保護ウォール、Selinux、およびスワップ パーティション (すべてのノード) を閉じます。

#关闭系统防火墙:
systemctl stop firewalld
systemctl disable firewalld
#关闭Selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
#关闭Swap分区
sed -ri 's/.*swap.*/#&/' /etc/fstab

期待される結果は次のとおりです (スクリーンショットはマスター ノードのみです)。

 マスターノードにホストを追加する

cat >> /etc/hosts << EOF
192.168.1.186 k8s-master
192.168.1.187 k8s-node1
192.168.1.188 k8s-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

 構成後に期待される結果:

2. Docker、kubeadm、および kubelet をインストールします [すべてのノード]

1.Dockerをインストールする

#下载docker的阿里云安装源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
#安装docker
yum -y install docker-ce
#设置为开机启动,并启动docker
systemctl enable docker && systemctl start docker

期待される結果は次のとおりです。

 Docker アクセラレータを構成する

#配置docker加速
cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
#重启docker
systemctl restart docker
#查看docker信息

docker info

期待される結果は次のとおりです。

 3. Alibaba Cloud yum ソフトウェア ソースを構成し、Kubeadm、kubelet、および kubectl をインストールします。

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

 4. 指定されたバージョンの K8s をインストールします。バージョン 1.23.0 を指定してインストールします。

yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0

インストールプロセス:

 インストール完了後に期待される結果:

 スタートアップの追加

systemctl enable kubelet

 

3. K8SMaster ノードのデプロイ

計画したマスターノードで実行する

kubeadm init \
  --apiserver-advertise-address=192.168.1.186 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.23.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --ignore-preflight-errors=all

インストールプロセス:


インストール後に期待される結果は次のとおりです。

 注: インストールのこのステップ中にプロンプ​​トが表示されます。

[kubelet-check] 「curl -sSL http://localhost:10248/healthz」に等しい HTTP 呼び出しがエラーで失敗しました: Get "http://localhost:10248/healthz": digial tcp [::1]:10248 : 接続: 接続が拒否されました。

    残念ながら、エラーが発生しました:
        条件の待機中にタイムアウトになりました

    このエラーは次の原因で発生する可能性があります:
        - kubelet が実行されていない
        - 何らかの方法でノードの構成が間違っているため、kubelet が異常である (必要な cgroups が無効になっている)

    systemd を搭載したシステムを使用している場合は、次のコマンドを使用してエラーのトラブルシューティングを試みることができます。 -
        'systemctl status kubelet'
        - 'journalctl -xeu kubelet'

    さらに、コントロール プレーン コンポーネントは、コンテナー ランタイムによって起動されたときにクラッシュまたは終了した可能性があります。
    トラブルシューティングを行うには、優先コンテナー ランタイム CLI を使用してすべてのコンテナーを一覧表示します。


        以下は、 docker    で実行されているすべての Kubernetes コンテナーを一覧表示する方法の一例です。grep キューブ | grep -v stop'
        失敗したコンテナーを見つけたら、次のコマンドを使用してそのログを検査できます。
        - 'docker logs CONTAINERID'

エラー実行フェーズ wait-control-plane: Kubernetes クラスターを初期化できませんでした
このエラーのスタック トレースを確認するには、--v=5 以降を使用して実行してください

これは、スワップ パーティションを一時的に直接閉じていないことが原因であり、swapoff -a を実行して kubelet を再起動するだけです。

#临时关闭swap分区
swapoff -a

 4. K8Snode ノードに参加します

kubeadm を使用して、ノードノードをクラスターに参加させます (すべての子ノードを実行する必要があります)。

kubeadm join 192.168.1.186:6443 --token rd8ymi.oeztlaletd9agkp0 \
	--discovery-token-ca-cert-hash sha256:b0c8918fc95faab2cc71d49a8f7ebde6902c4e5c60034f91252db6454f01c24c

 kubectl 環境変数と認証を追加し、追加されたノードを表示します

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
#查看node节点
kubectl get nodes

 ノードは現在準備中のため、実行されていません。

準備された期待結果は図に示すとおりです。

 注: デフォルトのトークンは 24 時間有効です。24 時間を超える場合は、再生成する必要があります。

kubeadm token create --print-join-command

5. Calico (CNI) コンテナネットワークに参加する

calico は純粋な 3 層データ ネットワーク センター ソリューションであり、k8s の主流のネットワーク ソリューションです。

ダウンロードyaml

wget https://docs.projectcalico.org/manifests/calico.yaml

ダウンロード後、calico をデプロイします

kubectl apply -f calico.yaml

calico の展開情報を表示する

 kubectl get pods -n kube-system

期待される結果は次の図に示すとおりです。

 6. ダッシュボードの展開

ダッシュボードはk8sが公式に提供するUIで、K8Sクラスタのリソースを管理することができます。

vi recommended.yaml
...
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001
  selector:
    k8s-app: kubernetes-dashboard
  type: NodePort
...

kubectl apply -f recommended.yaml
kubectl get pods -n kubernetes-dashboard

に追加:

ノードポート: 30001

タイプ: ノードポート

# 创建用户
kubectl create serviceaccount dashboard-admin -n kube-system
# 用户授权
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 获取用户Token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

アクセスしたアドレスは http://masterip:30001 です。

ログイン時には取得したTokenを使用してログインしてください。

ログインの期待値は次のとおりです。

ぜひ皆さんも公式アカウントをフォローして、運用保守、セキュリティ、開発などの知識を一緒に学び、切磋琢磨し、共に進歩していきましょう。

 

おすすめ

転載: blog.csdn.net/u011630259/article/details/125194819