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を使用してログインしてください。
ログインの期待値は次のとおりです。
ぜひ皆さんも公式アカウントをフォローして、運用保守、セキュリティ、開発などの知識を一緒に学び、切磋琢磨し、共に進歩していきましょう。