国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

(【云原生 | Kubernetes 系列】— Kubernetes 1.28 存儲方案)

這篇具有很好參考價值的文章主要介紹了(【云原生 | Kubernetes 系列】— Kubernetes 1.28 存儲方案)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【云原生 | Kubernetes 系列】— Kubernetes存儲方案

版權(quán) 本文為云錄原創(chuàng)文章,轉(zhuǎn)載無需和我聯(lián)系,但請注明來自云錄 https://www.yunzhuan.site

?? 一、基本存儲

EmptyDir

   當Pod 被分配給節(jié)點時,首先創(chuàng)建 emptyDir 卷,并且只要該 Pod 在該節(jié)點上運行,該卷就會存在。正如卷的名字所述,
它最初是空的。Pod 中的容器可以讀取和寫入 emptyDir 卷中的相同文件,盡管該卷可以掛載到每個容器中的相同或不同路徑上。
當出于任何原因從節(jié)點中刪除 Pod 時, emptyDir 中的數(shù)據(jù)將被永久刪除

用途:
1: 緩存空間,例如基于磁盤的歸并排序。
2: 為耗時較長的計算任務提供檢查點,以便任務能方便地從崩潰前狀態(tài)恢復執(zhí)行。
3: 在 Web 服務器容器服務數(shù)據(jù)時,保存內(nèi)容管理器容器獲取的文件。

apiVersion: v1
kind: Pod
metadata:
  name: volume-emptydir
spec:
  containers:
    - name: nginx
      image: nginx:latest
      ports:
        - name: nginx-port
          containerPort: 80
          protocol: TCP
      volumeMounts:    # 將logs-volume掛載到nginx容器的/var/log/nginx目錄, nginx會將用戶的訪問日志寫入到該目錄的access.log文件中
        - name: logs-volume
          mountPath: /var/log/nginx
    - name: busybox
      image: busybox:latest
      command: ["/bin/sh", "-c", "tail -f /logs/access.log"]
      volumeMounts:    # 將logs-volume掛載到busybox容器中的/logs目錄
        - name: logs-volume
          mountPath: /logs
  volumes:    # 聲明volume
    - name: logs-volume
      emptyDir:
        sizeLimit: 500Mi
[root@k8s-master01 nfs]# kubectl   get po  -o wide
NAME              READY   STATUS    RESTARTS      AGE   IP           NODE        NOMINATED NODE   READINESS GATES
volume-emptydir   2/2     Running   2 (47s ago)   75s   10.244.1.7   k8s-node1   <none>           <none>

[root@k8s-master01 ~]# curl 10.244.1.7
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

[root@k8s-master01 ~]# kubectl logs volume-emptydir -c busybox -f
10.244.0.0 - - [01/Jan/2024:05:20:38 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"


HostPath

警告:
HostPath 卷存在許多安全風險,最佳做法是盡可能避免使用 HostPath。 當必須使用 HostPath 卷時,它的范圍應僅限于所需的文件或目錄,并以只讀方式掛載。
如果通過 AdmissionPolicy 限制 HostPath 對特定目錄的訪問,則必須要求 volumeMounts 使用 readOnly 掛載以使策略生效。
hostPath 卷能將主機節(jié)點文件系統(tǒng)上的文件或目錄掛載到你的 Pod 中。 雖然這不是大多數(shù) Pod 需要的,
但是它為一些應用程序提供了強大的逃生艙。

例如,hostPath 的一些用法有:

  • 運行一個需要訪問 Docker 內(nèi)部機制的容器;可使用 hostPath 掛載 /var/lib/docker 路徑。

  • 在容器中運行 cAdvisor 時,以 hostPath 方式掛載 /sys。

  • 允許 Pod 指定給定的 hostPath 在運行 Pod 之前是否應該存在,是否應該創(chuàng)建以及應該以什么方式存在。
    除了必需的 path 屬性之外,你可以選擇性地為 hostPath 卷指定 type。

    取值 行為
    空字符串(默認)用于向后兼容,這意味著在安裝 hostPath 卷之前不會執(zhí)行任何檢查。
    DirectoryOrCreate 如果在給定路徑上什么都不存在,那么將根據(jù)需要創(chuàng)建空目錄,權(quán)限設置為 0755,具有與 kubelet 相同的組和屬主信息
    Directory 在給定路徑上必須存在的目錄。
    FileOrCreate 如果在給定路徑上什么都不存在,那么將在那里根據(jù)需要創(chuàng)建空文件,權(quán)限設置為 0644,具有與 kubelet 相同的組和所有權(quán)。
    File 在給定路徑上必須存在的文件。
    Socket 在給定路徑上必須存在的 UNIX 套接字。
    CharDevice 在給定路徑上必須存在的字符設備。
    BlockDevice 在給定路徑上必須存在的塊設備。
apiVersion: v1
kind: Pod
metadata:
  name: test-webserver
spec:
  containers:
    - name: test-webserver
      image: beicheng1892/test-webserver:latest
      volumeMounts:
        - mountPath: /var/local/aaa
          name: mydir
        - mountPath: /var/local/aaa/1.txt
          name: myfile
  volumes:
    - name: mydir
      hostPath:
        # 確保文件所在目錄成功創(chuàng)建。
        path: /var/local/aaa
        type: DirectoryOrCreate
    - name: myfile
      hostPath:
        path: /var/local/aaa/1.txt
        type: FileOrCreate
-rw-r--r-- 1 root root 499 Dec 31 21:40 hostpath.yaml
[root@k8s-master01 nfs]# kubectl   apply   -f hostpath.yaml 
pod/test-webserver created
[root@k8s-master01 nfs]# kubectl  get po -o wide
NAME              READY   STATUS    RESTARTS   AGE    IP           NODE        NOMINATED NODE   READINESS GATES
test-webserver    1/1     Running   0          10s    10.244.1.8   k8s-node1   <none>           <none>
volume-emptydir   2/2     Running   0          3h6m   10.244.1.7   k8s-node1   <none>           <none>
[root@k8s-node1 ~]# cd /var/local/
[root@k8s-node1 local]# ll
total 0
drwxr-xr-x 2 root root 19 Dec 31 21:40 aaa
[root@k8s-node1 local]# cd aaa/
[root@k8s-node1 aaa]# ll
total 0
-rw-r--r-- 1 root root 0 Dec 31 21:40 1.txt

NFS

nfs 卷能將 NFS (網(wǎng)絡文件系統(tǒng)) 掛載到你的 Pod 中。 不像 emptyDir 那樣會在刪除 Pod 的同時也會被刪除,
nfs 卷的內(nèi)容在刪除 Pod 時會被保存,卷只是被卸載。 這意味著 nfs 卷可以被預先填充數(shù)據(jù),并且這些數(shù)據(jù)可以在 Pod 之間共享。
搭建nfs服務器
1. 安裝NFS服務
[root@k8s-node3 ~]# yum -y install rpcbind nfs-utils
2. 準備共享目錄
[root@k8s-node3 ~]# mkdir -p /data/nfs
[root@k8s-node3 ~]# chmod 777 -R /data/nfs
3. 將共享目錄以讀寫權(quán)限暴露給192.168.0.0/255網(wǎng)段中的所有主機
[root@k8s-node3 ~]# cat /etc/exports
[root@k8s-node3 ~]# vim /etc/exports
[root@k8s-node3 nfs]# cat  /etc/exports
/data/nfs/   *(rw,sync,all_squash)
# 啟動服務
systemctl start rpcbind && systemctl start nfs
# 設置開機啟動
systemctl enable rpcbind && systemctl enable nfs
[root@k8s-node3 ~]# systemctl start rpcbind && systemctl start nfs
[root@k8s-node3 ~]# systemctl enable rpcbind && systemctl enable nfs
其中no_root_squash表示:NFS客戶端連接服務端時如果使用的是root的話,那么對服務端共享目錄也擁有root權(quán)限
# 客戶端安裝步驟
yum -y install rpcbind
# 檢測
showmount -e 192.168.0.105

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
    - image: beicheng1892/test-webserver:latest
      name: test-container
      volumeMounts:
        - mountPath: /my-nfs-data
          name: test-volume
  volumes:
    - name: test-volume
      nfs:
        server: 192.168.0.105
        path: /data/nfs
        readOnly: true
[root@k8s-master01 nfs]# kubectl   apply   -f  nfs.yaml 
pod/test-pd created

[root@k8s-master01 nfs]# kubectl   get po   -o wide
NAME              READY   STATUS    RESTARTS   AGE     IP           NODE        NOMINATED NODE   READINESS GATES
test-pd           1/1     Running   0          104s    10.244.2.6   k8s-node2   <none>           <none>
test-webserver    1/1     Running   0          26m     10.244.1.8   k8s-node1   <none>           <none>
volume-emptydir   2/2     Running   0          3h32m   10.244.1.7   k8s-node1   <none>           <none>

?? 二、高級存儲

PV和PVC

  • PersistentVolume (PV)
    是由管理員設置的存儲,它是群集的一部分。就像節(jié)點是集群中的資源一樣,PV 也是集群中的資源。 PV 是
Volume 之類的卷插件,但具有獨立于使用 PV 的 Pod 的生命周期。此 API 對象包含存儲實現(xiàn)的細節(jié),即 NFS、
iSCSI 或特定于云供應商的存儲系統(tǒng)
  • PersistentVolumeClaim (PVC)
    是用戶存儲的請求。它與 Pod 相似。Pod 消耗節(jié)點資源,PVC 消耗 PV 資源。Pod 可以請求特定級別的資源
(CPU 和內(nèi)存)。聲明可以請求特定的大小和訪問模式(例如,可以以讀/寫一次或 只讀多次模式掛載)
  • 靜態(tài) pv
集群管理員創(chuàng)建一些 PV。它們帶有可供群集用戶使用的實際存儲的細節(jié)。它們存在于 Kubernetes API 中,可用
于消費
  • 動態(tài)
    當管理員創(chuàng)建的靜態(tài) PV 都不匹配用戶的 PersistentVolumeClaim 時,集群可能會嘗試動態(tài)地為 PVC 創(chuàng)建卷。此
配置基于 StorageClasses :PVC 必須請求 [存儲類],并且管理員必須創(chuàng)建并配置該類才能進行動態(tài)創(chuàng)建。聲明該
類為 "" 可以有效地禁用其動態(tài)配置
要啟用基于存儲級別的動態(tài)存儲配置,集群管理員需要啟用 API server 上的 DefaultStorageClass [準入控制器]
。例如,通過確保 DefaultStorageClass 位于 API server 組件的 --admission-control 標志,使用逗號分隔的
有序值列表中,可以完成此操作
  • 綁定
    master 中的控制環(huán)路監(jiān)視新的 PVC,尋找匹配的 PV(如果可能),并將它們綁定在一起。如果為新的 PVC 動態(tài)
調(diào)配 PV,則該環(huán)路將始終將該 PV 綁定到 PVC。否則,用戶總會得到他們所請求的存儲,但是容量可能超出要求
的數(shù)量。一旦 PV 和 PVC 綁定后, PersistentVolumeClaim 綁定是排他性的,不管它們是如何綁定的。 PVC 跟
PV 綁定是一對一的映射
  • 持久化卷聲明的保護
PVC 保護的目的是確保由 pod 正在使用的 PVC 不會從系統(tǒng)中移除,因為如果被移除的話可能會導致數(shù)據(jù)丟失
當啟用PVC 保護 alpha 功能時,如果用戶刪除了一個 pod 正在使用的 PVC,則該 PVC 不會被立即刪除。PVC 的
刪除將被推遲,直到 PVC 不再被任何 pod 使用
  • 持久化卷類型
PersistentVolume 類型以插件形式實現(xiàn)。Kubernetes 目前支持以下插件類型:
GCEPersistentDisk AWSElasticBlockStore AzureFile AzureDisk FC (Fibre Channel)
FlexVolume Flocker NFS iSCSI RBD (Ceph Block Device) CephFS
Cinder (OpenStack block storage) Glusterfs VsphereVolume Quobyte Volumes
HostPath VMware Photon Portworx Volumes ScaleIO Volumes StorageOS

pv

apiVersion: v1  
kind: PersistentVolume
metadata:
  name: pv2
spec:
  nfs: # 存儲類型,與底層真正存儲對應
  capacity:  # 存儲能力,目前只支持存儲空間的設置
    storage: 2Gi
  accessModes:  # 訪問模式
  storageClassName: # 存儲類別
  persistentVolumeReclaimPolicy: # 回收策略

  • 回收策略(persistentVolumeReclaimPolicy)
    當PV不再被使用了之后,對其的處理方式。目前支持三種策略:

    • Retain (保留) 保留數(shù)據(jù),需要管理員手工清理數(shù)據(jù)
    • Recycle(回收) 清除 PV 中的數(shù)據(jù),效果相當于執(zhí)行 rm -rf /thevolume/*(1.28 廢棄了)
    • Delete (刪除) 與 PV 相連的后端存儲完成 volume 的刪除操作,當然這常見于云服務商的存儲服務
  • 訪問模式(accessModes)
    用于描述用戶應用對存儲資源的訪問權(quán)限,訪問權(quán)限包括下面幾種方式:

    • ReadWriteOnce(RWO):讀寫權(quán)限,但是只能被單個節(jié)點掛載
    • ReadOnlyMany(ROX): 只讀權(quán)限,可以被多個節(jié)點掛載
    • ReadWriteMany(RWX):讀寫權(quán)限,可以被多個節(jié)點掛載
  • 狀態(tài)
    卷可以處于以下的某種狀態(tài):

    • Available(可用)——一塊空閑資源還沒有被任何聲明綁定
    • Bound(已綁定)——卷已經(jīng)被聲明綁定
    • Released(已釋放)——聲明被刪除,但是資源還未被集群重新聲明

pvc

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc
  namespace: dev
spec:
  accessModes: # 訪問模式
  selector: # 采用標簽對PV選擇
  storageClassName: # 存儲類別
  resources: # 請求空間
    requests:
      storage: 5Gi


PVC 的關(guān)鍵配置參數(shù)說明:

  • 訪問模式(accessModes)
    ? 用于描述用戶應用對存儲資源的訪問權(quán)限

  • 選擇條件(selector)
    通過Label Selector的設置,可使PVC對于系統(tǒng)中己存在的PV進行篩選

  • 存儲類別(storageClassName) PVC在定義時可以設定需要的后端存儲的類別,只有設置了該class的pv才能被系統(tǒng)選出

  • 資源請求(Resources ) 描述對存儲資源的請求

演示 -NFS

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    path: /data/nfs
    server: 192.168.0.105
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
---
apiVersion: v1
kind: Pod
metadata:
  name: test-web
spec:
  containers:
    - name: nginx
      image: nginx:1.21.0
      imagePullPolicy: IfNotPresent
      ports:
        - containerPort: 80
      volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
  volumes:
    - name: html
      persistentVolumeClaim:
        claimName: test-pvc

StorageClass(動態(tài)存儲)

StorageClass準備

---
# sc安裝
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner

---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: nfs-client-provisioner-runner
rules:
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["list", "watch", "create", "update", "patch"]
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["create", "delete", "get", "list", "watch", "patch", "update"]

---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: run-nfs-client-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    namespace: default
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner-runner
  apiGroup: rbac.authorization.k8s.io

---
# nfs client
kind: Deployment
apiVersion: apps/v1
metadata:
  name: nfs-client-provisioner
spec:
  selector:
    matchLabels:
      app: nfs-client-provisioner
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      #serviceAccountName的 nfs-client-provisioner 名稱是 ServiceAccount 名稱
      serviceAccountName: nfs-client-provisioner
      containers:
        - name: nfs-client-provisioner
          #image: quay.io/external_storage/nfs-client-provisioner:latest
          #這里特別注意,在k8s-1.20以后版本中使用上面提供的包,并不好用,這里我折騰了好久,才解決,后來在官方的github上,別人提的問題中建議使用下面這個包才解決的,我這里是下載后,傳到我自已的倉庫里
          image: gmoney23/nfs-client-provisioner:latest
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: fuseim.pri/ifs  # 指定分配器的名稱,創(chuàng)建storageclass會用到
            - name: NFS_SERVER
              value: 192.168.0.105
            - name: NFS_PATH
              value: /data/nfs
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.0.105
            path: /data/nfs

---
# nfs 存儲類
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-storage
provisioner: fuseim.pri/ifs  #必須與provisioner.yaml中PROVISIONER_NAME的值一致



[root@k8s-master01 nfs]# kubectl get deploy nfs-client-provisioner
NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
nfs-client-provisioner   1/1     1            1           102s
[root@k8s-master01 nfs]# kubectl get pods
NAME                                      READY   STATUS    RESTARTS   AGE
nfs-client-provisioner-54b55f79fd-qspkr   1/1     Running   0          108s
[root@k8s-master01 nfs]# kubectl get sc
NAME          PROVISIONER      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-storage   fuseim.pri/ifs   Delete          Immediate           false                  115s

創(chuàng)建deployment應用StorageClass

---
# 手動創(chuàng)建pvpvc
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: test-pvc
spec:
  storageClassName: nfs-storage
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
---
#創(chuàng)建deployment應用NFS
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-1
spec:
  selector:
    matchLabels:
      app: web-1
  replicas: 2
  template:
    metadata:
      labels:
        app: web-1
    spec:
      containers:
        - name: web-1
          image: nginx:latest
          ports:
            - containerPort: 80
          volumeMounts:
            - name: test-storage
              mountPath: /data/html
      volumes:
        - name: test-storage
          persistentVolumeClaim:
            #claimName 的 名稱 是 PersistentVolumeClaim 的名字
            claimName: test-pvc
[root@k8s-master01 nfs]# kubectl get  po 
NAME                                    READY   STATUS    RESTARTS   AGE
nfs-client-provisioner-876986df-j5c74   1/1     Running   0          118s
web-1-75685c5697-d2qsw                  1/1     Running   0          13m
web-1-75685c5697-xftfd                  1/1     Running   0          13m

[root@k8s-node3 data]# cd nfs/
[root@k8s-node3 nfs]# ll
total 4
drwxrwxrwx 2 nfsnobody nfsnobody  6 Jan  4 21:42 default-test-pvc-pvc-7c40ad07-b15f-42c6-a551-572b0bff8542
-rw-r--r-- 1 nfsnobody nfsnobody 17 Jan  4 01:39 test.txt
[root@k8s-node3 nfs]# ped
bash: ped: command not found...
[root@k8s-node3 nfs]# pwd
/data/nfs

創(chuàng)建StatefulSet應用StorageClass

--- #服務
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx
  serviceName: "nginx"
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
          - containerPort: 80
            name: web
          volumeMounts:
          - name: www
            mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "nfs-storage"
      resources:
        requests:
          storage: 1Gi




[root@k8s-master01 nfs]# kubectl get  sts 
NAME   READY   AGE
web    1/3     8s
[root@k8s-master01 nfs]# kubectl get  po 
NAME                                    READY   STATUS              RESTARTS   AGE
nfs-client-provisioner-876986df-j5c74   1/1     Running             0          9m29s
web-0                                   1/1     Running             0          13s
web-1                                   1/1     Running             0          9s
web-2                                   0/1     ContainerCreating   0          3s
[root@k8s-master01 nfs]# kubectl  get  pvc
NAME        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
www-web-0   Bound    pvc-47b8b191-2eaa-4032-9a62-f96f586e5330   1Gi        RWO            nfs-storage    22s
www-web-1   Bound    pvc-a34e3185-8cd9-452b-9ec0-98ae65988b6a   1Gi        RWO            nfs-storage    18s
www-web-2   Bound    pvc-989aff50-0602-468f-a939-0c14df7104f0   1Gi        RWO            nfs-storage    12s
[root@k8s-master01 nfs]# kubectl  get  pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM               STORAGECLASS   REASON   AGE
pvc-47b8b191-2eaa-4032-9a62-f96f586e5330   1Gi        RWO            Delete           Bound    default/www-web-0   nfs-storage             23s
pvc-989aff50-0602-468f-a939-0c14df7104f0   1Gi        RWO            Delete           Bound    default/www-web-2   nfs-storage             13s
pvc-a34e3185-8cd9-452b-9ec0-98ae65988b6a   1Gi        RWO            Delete           Bound    default/www-web-1   nfs-storage             19s

??三、配置存儲

ConfigMap

ConfigMap 功能在 Kubernetes1.2 版本中引入,許多應用程序會從配置文件、命令行參數(shù)或環(huán)境變量中讀取配
置信息。ConfigMap API 給我們提供了向容器中注入配置信息的機制,ConfigMap 可以被用來保存單個屬性,也
可以用來保存整個配置文件或者 JSON 二進制大對象
ConfigMap 的創(chuàng)建

Ⅰ、使用目錄創(chuàng)建

$ ls docs/user-guide/configmap/kubectl/
game.properties
ui.properties
$ cat docs/user-guide/configmap/kubectl/game.properties
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
$ cat docs/user-guide/configmap/kubectl/ui.properties
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice
$ kubectl create configmap game-config --from-file=docs/user-guide/configmap/kubectl

Ⅱ、使用文件創(chuàng)建

$ kubectl create configmap game-config-2 --from-file=docs/user-
guide/configmap/kubectl/game.properties
$ kubectl get configmaps game-config-2 -o yaml

Ⅲ、使用字面值創(chuàng)建

$ kubectl create configmap special-config --from-literal=special.how=very --from-
literal=special.type=charm
$ kubectl get configmaps special-config -o yaml
Pod 中使用 ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  special.how: very
  special.type: charm
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: env-config
  namespace: default
data:
  log_level: INFO
---
apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: hub.atguigu.com/library/myapp:v1
      command: [ "/bin/sh", "-c", "env" ]
      env:
        - name: SPECIAL_LEVEL_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config
              key: special.how
        - name: SPECIAL_TYPE_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config
              key: special.type
      envFrom:
       - configMapRef:
           name: env-config
  restartPolicy: Never

Secret

Secret 解決了密碼、token、密鑰等敏感數(shù)據(jù)的配置問題,而不需要把這些敏感數(shù)據(jù)暴露到鏡像或者 Pod Spec
中。Secret 可以以 Volume 或者環(huán)境變量的方式使用

Secret 有三種類型:

  • Service Account :用來訪問 Kubernetes API,由 Kubernetes 自動創(chuàng)建,并且會自動掛載到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目錄中

  • Opaque :base64編碼格式的Secret,用來存儲密碼、密鑰等

  • kubernetes.io/dockerconfigjson :用來存儲私有 docker registry 的認證信息

Service Account
$ kubectl run nginx --image nginx
deployment "nginx" created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-3137573019-md1u2 1/1 Running 0 13s
$ kubectl exec nginx-3137573019-md1u2 ls /run/secrets/kubernetes.io/serviceaccount
ca.crt
namespace
token
Opaque Secret
$ echo -n "admin" | base64
YWRtaW4=
$ echo -n "1f2d1e2e67df" | base64
MWYyZDFlMmU2N2Rm
# secrets.yml
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  password: MWYyZDFlMmU2N2Rm
  username: YWRtaW4=
kubernetes.io/dockerconfigjson

使用 Kuberctl 創(chuàng)建 docker registry 認證的 secret

$ kubectl create secret docker-registry myregistrykey --docker-server=DOCKER_REGISTRY_SERVER --
docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD --docker-email=DOCKER_EMAIL

secret "myregistrykey" created.

在創(chuàng)建 Pod 的時候,通過 imagePullSecrets 來引用剛創(chuàng)建的 myregistrykey文章來源地址http://www.zghlxwxcb.cn/news/detail-781803.html

apiVersion: v1
kind: Pod
metadata:
  name: foo
spec:
  containers:
    - name: foo
      image: roc/awangyang:v1
  imagePullSecrets:
    - name: myregistrykey
如果有什么問題,請聯(lián)系作者 beicheng1892@163.com
版權(quán) 本文為云錄原創(chuàng)文章,轉(zhuǎn)載無需和我聯(lián)系,但請注明來自云錄 https://www.yunzhuan.site

到了這里,關(guān)于(【云原生 | Kubernetes 系列】— Kubernetes 1.28 存儲方案)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • cetos7搭建部署k8s 版本1.28

    目錄 系統(tǒng)最低要求 基礎(chǔ)準備工作--三臺主機 k8s集群安裝 在master上安裝 calico?網(wǎng)絡插件 K8s集群加入node工作節(jié)點 k8s集群搭建完成 更改contianerd 運行時容器 為cri-docker 安裝helm helm常用指令 徹底刪除calico網(wǎng)絡插件 POD命令 namespace命令 ERROR: cir-docke報錯 內(nèi)存最少是4G? cpu個數(shù)最少兩

    2024年01月20日
    瀏覽(57)
  • 云原生Kubernetes:K8S存儲卷

    云原生Kubernetes:K8S存儲卷

    目錄 一、理論 1.存儲卷 2.emptyDir 存儲卷 3.hostPath卷 4.NFS共享存儲 5.PVC 和 PV 6.靜態(tài)創(chuàng)建PV 7.動態(tài)創(chuàng)建PV 二、實驗 ?1.emptyDir 存儲卷 2.hostPath卷 3.NFS共享存儲 4.靜態(tài)創(chuàng)建PV 5.動態(tài)創(chuàng)建PV 三、問題 1.生成pod一直pending 2.shoumount -e未顯示共享目錄 3.靜態(tài)創(chuàng)建pv 報錯 4.使用 Deployment 來創(chuàng)建

    2024年02月07日
    瀏覽(33)
  • CentOS7使用kubeadm部署k8s-1.28集群

    CentOS7使用kubeadm部署k8s-1.28集群

    參考資料:生產(chǎn)環(huán)境 記錄使用CentOS7.9進行k8s-1.28版本部署,運行時環(huán)境使用containerd,網(wǎng)絡插件使用calic,集群搭建完成后。搭建NFS共享存儲環(huán)境,測試運行pod并掛載使用持久卷。 主機名 **IP地址 ** 角色 基礎(chǔ)組件 el7-linux-node-01 192.168.240.11 k8s-master kubeadm,kubelet,kubectl,containerd,nf

    2024年04月26日
    瀏覽(28)
  • K8S(1.28)--部署ingress-nginx(1.9.1)

    K8S(1.28)--部署ingress-nginx(1.9.1)

    原文網(wǎng)址:K8S(1.28)--部署ingress-nginx(1.9.1)-CSDN博客 本文介紹K8S部署ingress-nginx的方法。 本文使用的K8S和ingress-nginx都是最新的版本。 官網(wǎng)地址 https://kubernetes.github.io/ingress-nginx/deploy/ Ingress里Nginx的代理流程: 1.確定版本 首先確定版本:https://github.com/kubernetes/ingress-nginx 我K8S是1.2

    2024年02月20日
    瀏覽(28)
  • 基于containerd容器運行時,kubeadmin部署k8s 1.28集群

    基于containerd容器運行時,kubeadmin部署k8s 1.28集群

    centos7u9 序號 主機名 ip地址 CPU 內(nèi)存 硬盤 1 k8s-master1 192.168.1.200 2C 2G 100G 2 k8s-worker1 192.168.1.201 2C 2G 100G 3 k8s-worker2 192.168.1.202 2C 2G 100G 1.3.1主機名配置 vi /etc/sysconfig/network-scripts/ifcfg-ens33 1.3.3主機名與IP地址解析(hosts) vi /etc/hosts 1.3.4防火墻配置 關(guān)閉防火墻firewalld 1.3.5SELINUX配置 修改

    2024年02月01日
    瀏覽(38)
  • k8s(1.28)使用Helm安裝metrics-server

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 提示:這里可以添加本文要記錄的大概內(nèi)容: metrics-server安裝后,可以查看集群的node和pod的CPU和Memory占用情況,非常有用。 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 官網(wǎng)地址:https://github

    2024年02月19日
    瀏覽(42)
  • k8s 1.28版本:使用StorageClass動態(tài)創(chuàng)建PV,SelfLink 問題修復

    ?? k8s中提供了一套自動創(chuàng)建 PV 的機制,就是基于 StorageClass 進行的 ,通過 StorageClass 可以實現(xiàn)僅僅配置 PVC,然后交由 StorageClass 根據(jù) PVC 的需求動態(tài)創(chuàng)建 PV。 問題: ??使用 k8s 1.28版本,通過 kubectl get pvc ,發(fā)現(xiàn) PVC一直處于 Pending 狀態(tài)。通過 kubectl describe pvc [pvc名稱] 描述

    2024年02月08日
    瀏覽(17)
  • 【云原生 | Kubernetes 系列】K8s 實戰(zhàn) 管理 Secret 詳解

    【云原生 | Kubernetes 系列】K8s 實戰(zhàn) 管理 Secret 詳解

    Secret 是一種包含少量敏感信息例如密碼、令牌或密鑰的對象。 這樣的信息可能會被放在 Pod 規(guī)約中或者鏡像中。 用戶可以創(chuàng)建 Secret,同時系統(tǒng)也創(chuàng)建了一些 Secret。 一個 Secret 可以包含 Pod 訪問數(shù)據(jù)庫所需的用戶憑證。 例如,由用戶名和密碼組成的數(shù)據(jù)庫連接字符串。 你可

    2024年02月02日
    瀏覽(96)
  • 【云原生-Kubernetes篇】K8s的存儲卷/數(shù)據(jù)卷+PV與PVC

    【云原生-Kubernetes篇】K8s的存儲卷/數(shù)據(jù)卷+PV與PVC

    容器部署過程中一般有以下三種數(shù)據(jù): ? 啟動時需要的 初始數(shù)據(jù) :例如配置文件 (init container) ? 啟動過程中產(chǎn)生的 臨時數(shù)據(jù) :該臨時數(shù)據(jù)需要多個容器間共享 ? 啟動過程中產(chǎn)生的 持久化數(shù)據(jù) :例如MySQL的data目錄 (業(yè)務數(shù)據(jù)–很重要) 而容器中的文件在磁盤上是 臨時

    2024年02月05日
    瀏覽(20)
  • 【云原生 | Kubernetes 系列】K8s 實戰(zhàn) 如何給應用注入數(shù)據(jù)

    【云原生 | Kubernetes 系列】K8s 實戰(zhàn) 如何給應用注入數(shù)據(jù)

    前面我們已經(jīng)一起學習了很多的東西了,本篇文章,我們將一起學習,如何給應用注入數(shù)據(jù),當然,本篇文章不會講解全部知識點,而是帶領(lǐng)大家,一起學習如何對我們的項目進行相關(guān)的配置和設置。 創(chuàng)建 Pod 時,可以為其下的容器設置啟動時要執(zhí)行的命令及其參數(shù)。如果要

    2024年02月02日
    瀏覽(95)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包