Kubernetes クラスター YAML ファイルの詳細#
kubectl create コマンドを使用して yaml ファイルを生成
kubectl create deployment web --image=nginx -o yaml --dry-run
ファイルに出力
kubectl create deployment web --image=nginx -o yaml --dry-run > my.yaml
kubectl get コマンドを使用して yaml ファイルをエクスポート
kubectl get deploy nginx -o=yaml --export > nginx.yaml
Kubernetes クラスターのアップグレード#
マスターノード
# kubeadmのリリースバージョンを確認
yum list --showduplicates kubeadm --disableexcludes=kubernetes
# kubeadmの最新バージョンをダウンロード
yum install -y kubeadm-1.28.0 --disableexcludes=kubernetes
# アップグレードプランを検証
kubeadm upgrade plan
# 国内のイメージを取得
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
# アップグレードするターゲットバージョンを選択
kubeadm upgrade apply v1.28.0
# 成功メッセージ
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.28.0". Enjoy!
[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.
# kubeletとkubectlのアップグレード
# kubeletとkubectlの最新バージョンをダウンロード
yum install -y kubelet-1.28.0 kubectl-1.28.0 --disableexcludes=kubernetes
# kubeletを再起動
sudo systemctl daemon-reload
sudo systemctl restart kubelet
# バージョンを確認
kubeadm version
kubelet --version
kubectl version
ノード
# kubeadmの最新バージョンをダウンロード
yum install -y kubeadm-1.28.0 --disableexcludes=kubernetes
# ローカルのkubelet設定をアップグレード
kubeadm upgrade node
[upgrade] The configuration for this node was successfully updated!
[upgrade] Now you should go ahead and upgrade the kubelet package using your package manager.
# kubeletとkubectlのアップグレード
# kubeletとkubectlの最新バージョンをダウンロード
yum install -y kubelet-1.28.0 kubectl-1.28.0 --disableexcludes=kubernetes
# kubeletを再起動
sudo systemctl daemon-reload
sudo systemctl restart kubelet
# バージョンを確認
kubeadm version
kubelet --version
kubectl version
定期的に Dashboard ログイントークンを更新#
#!/bin/bash
#############説明#############
:<<!
定期的にDashboardログイントークンを生成し、有効期限は24時間です。
!
#############説明#############
token=$(/usr/bin/kubectl -n kubernetes-dashboard create token admin-user)
echo "
#######################################################
$(date) 新しいDashboardログイントークンを生成しました。最新のトークンは以下の通りです:
#######################################################
$token" > /root/dashboard/admin-user.token
Dashboard の ingress-nginx プロキシ設定#
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: k8s-dashboard
namespace: kubernetes-dashboard
labels:
ingress: k8s-dashboard
annotations:
nginx.ingress.kubernetes.io/rewrite-target: / # パスを再書き込み
nginx.ingress.kubernetes.io/ssl-redirect: "true" # httpを自動的にhttpsに転送
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
ingressClassName: nginx
rules:
- host: k8s.yjs.51xueweb.cn
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kubernetes-dashboard
port:
number: 443
ノードの NotReady 問題の処理#
ノードを再参加させるだけです
kubeadm token create --print-join-command > join-command.txt
cat join-command.txt
ingress-nginx コントローラーのインストール#
# yamlファイルをダウンロード
wget https://gitcode.net/mirrors/kubernetes/ingress-nginx/-/blob/master/deploy/static/provider/baremetal/deploy.yaml
# yamlファイル内のイメージ取得先を変更
#####################変更内容######################
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v20230407
registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.8.1
#####################変更内容######################
# インストール
kubectl apply -f deploy.ymal
# ステータスを確認
kubectl get pods -n ingress-nginx
################ステータス##################
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-2lz4v 0/1 Completed 0 5m46s
ingress-nginx-admission-patch-c6896 0/1 Completed 0 5m46s
ingress-nginx-controller-7575fb546-q29qn 1/1 Running 0 5m46s
# yamlファイルを変更
Deploymentクラスにレプリカを追加
####################変更内容####################
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.8.1
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
replicas: 2
minReadySeconds: 0
revisionHistoryLimit: 10
selector:
matchLabels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
k8s で nfs ネットワークストレージをマウント#
# クラスターのすべてのノードにnfsをインストール
yum -y install nfs-utils
# nfsディレクトリを作成し、権限を変更
mkdir /data
chmod -R 777 /data
echo "/data 10.12.10.32(insecure,rw,sync,no_root_squash) 10.12.10.33(insecure,rw,sync,no_root_squash) 10.12.10.34(insecure,rw,sync,no_root_squash) 10.12.10.35(insecure,rw,sync,no_root_squash)" >> /etc/exports
# 設定を有効にする
exportfs -r
exportfs
# rpcbind、nfsサービスを起動
systemctl restart rpcbind && systemctl enable rpcbind
systemctl restart nfs-server && systemctl enable nfs-server
# RPCサービスの登録状況を確認
rpcinfo -p localhost
# ファイアウォールポートを開放
firewall-cmd --add-port=2049/tcp --permanent
firewall-cmd --add-port=2049/udp --permanent
firewall-cmd --reload
firewall-cmd --list-all
nfsディレクトリが正常に提供されているかテスト
showmount -e 作成したディレクトリのホストIP
# 10.12.10.31の共有ディレクトリを他のホストにマウント
mount -t nfs 10.12.10.31:/data data
PV を作成
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
namespace: nfs-test
labels:
pv: nfs-pv
spec:
capacity:
storage: 5000Mi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
server: 10.12.10.31 # 作成したディレクトリのホストIP
path: "/data"
PVC を作成
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
namespace: nfs-test
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5000Mi # 容量
selector:
matchLabels:
pv: nfs-pv # pvに関連付け
k8s コマンドの自動補完#
yum -y install bash-completion
source /usr/share/bash-completion/bash_completion
echo 'source <(kubectl completion bash)' >> ~/.bashrc