banner
云野阁

云野阁

闲云野鹤,八方逍遥

Kubernetesの知識整理

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 問題の処理#

image-20240323232551958-1711207555524-1

ノードを再参加させるだけです

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
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。