最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Kubernetes(k8s)常用yaml配置和注釋方式

 更新時(shí)間:2025年05月29日 14:42:38   作者:禿了也弱了。  
這篇文章主要介紹了Kubernetes(k8s)常用yaml配置和注釋方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、pod

1、pod完整定義

# yaml格式的pod定義文件完整內(nèi)容:
apiVersion: v1       #必選,api版本號(hào),例如v1
kind: Pod           #必選,Pod
metadata:           #必選,元數(shù)據(jù)
  name: string       #必選,Pod名稱(chēng)
  namespace: string    #Pod所屬的命名空間,默認(rèn)在default的namespace
  labels:              # 自定義標(biāo)簽
    name: string     #自定義標(biāo)簽名字
  annotations:        #自定義注釋列表
    name: string
spec:         #必選,Pod中容器的詳細(xì)定義(期望)
  containers:      #必選,Pod中容器列表
  - name: string     #必選,容器名稱(chēng)
    image: string    #必選,容器的鏡像名稱(chēng)
    imagePullPolicy: [Always | Never | IfNotPresent] #獲取鏡像的策略 Alawys表示下載鏡像 IfnotPresent表示優(yōu)先使用本地鏡像,否則下載鏡像,Nerver表示僅使用本地鏡像
    command: [string]    #容器的啟動(dòng)命令列表,如不指定,使用打包時(shí)使用的啟動(dòng)命令
    args: [string]     #容器的啟動(dòng)命令參數(shù)列表
    workingDir: string     #容器的工作目錄
    volumeMounts:    #掛載到容器內(nèi)部的存儲(chǔ)卷配置
    - name: string     #引用pod定義的共享存儲(chǔ)卷的名稱(chēng),需用volumes[]部分定義的的卷名
      mountPath: string    #存儲(chǔ)卷在容器內(nèi)mount的絕對(duì)路徑,應(yīng)少于512字符
      readOnly: boolean    #是否為只讀模式
    ports:       #需要暴露的端口庫(kù)號(hào)列表
    - name: string     #端口號(hào)名稱(chēng)
      containerPort: int   #容器需要監(jiān)聽(tīng)的端口號(hào)
      hostPort: int    #容器所在主機(jī)需要監(jiān)聽(tīng)的端口號(hào),默認(rèn)與Container相同
      protocol: string     #端口協(xié)議,支持TCP和UDP,默認(rèn)TCP
    env:       #容器運(yùn)行前需設(shè)置的環(huán)境變量列表
    - name: string     #環(huán)境變量名稱(chēng)
      value: string    #環(huán)境變量的值
    resources:       #資源限制和請(qǐng)求的設(shè)置
      limits:      #資源限制的設(shè)置
        cpu: string    #Cpu的限制,單位為core數(shù),將用于docker run --cpu-shares參數(shù)
        memory: string     #內(nèi)存限制,單位可以為Mib/Gib,將用于docker run --memory參數(shù)
      requests:      #資源請(qǐng)求的設(shè)置
        cpu: string    #Cpu請(qǐng)求,容器啟動(dòng)的初始可用數(shù)量
        memory: string     #內(nèi)存清求,容器啟動(dòng)的初始可用數(shù)量
    livenessProbe:     #對(duì)Pod內(nèi)個(gè)容器健康檢查的設(shè)置,當(dāng)探測(cè)無(wú)響應(yīng)幾次后將自動(dòng)重啟該容器,檢查方法有exec、httpGet和tcpSocket,對(duì)一個(gè)容器只需設(shè)置其中一種方法即可
      exec:      #對(duì)Pod容器內(nèi)檢查方式設(shè)置為exec方式
        command: [string]  #exec方式需要制定的命令或腳本
      httpGet:       #對(duì)Pod內(nèi)個(gè)容器健康檢查方法設(shè)置為HttpGet,需要制定Path、port
        path: string
        port: number
        host: string
        scheme: string
        HttpHeaders:
        - name: string
          value: string
      tcpSocket:     #對(duì)Pod內(nèi)個(gè)容器健康檢查方式設(shè)置為tcpSocket方式
         port: number
       initialDelaySeconds: 0  #容器啟動(dòng)完成后首次探測(cè)的時(shí)間,單位為秒
       timeoutSeconds: 0   #對(duì)容器健康檢查探測(cè)等待響應(yīng)的超時(shí)時(shí)間,單位秒,默認(rèn)1秒
       periodSeconds: 0    #對(duì)容器監(jiān)控檢查的定期探測(cè)時(shí)間設(shè)置,單位秒,默認(rèn)10秒一次
       successThreshold: 0
       failureThreshold: 0
       securityContext:
         privileged:false
    restartPolicy: [Always | Never | OnFailure] # Pod的重啟策略,Always表示一旦不管以何種方式終止運(yùn)行,kubelet都將重啟,OnFailure表示只有Pod以非0退出碼退出才重啟,Nerver表示不再重啟該P(yáng)od
    nodeSelector: obeject  # 設(shè)置NodeSelector表示將該P(yáng)od調(diào)度到包含這個(gè)label的node上,以key:value的格式指定
    imagePullSecrets:    #Pull鏡像時(shí)使用的secret名稱(chēng),以key:secretkey格式指定
    - name: string
    hostNetwork: false     #是否使用主機(jī)網(wǎng)絡(luò)模式,默認(rèn)為false,如果設(shè)置為true,表示使用宿主機(jī)網(wǎng)絡(luò)
    volumes:       #在該pod上定義共享存儲(chǔ)卷列表
    - name: string     #共享存儲(chǔ)卷名稱(chēng) (volumes類(lèi)型有很多種)
      emptyDir: {}     #類(lèi)型為emtyDir的存儲(chǔ)卷,與Pod同生命周期的一個(gè)臨時(shí)目錄。為空值
      hostPath: string     #類(lèi)型為hostPath的存儲(chǔ)卷,表示掛載Pod所在宿主機(jī)的目錄
        path: string     #Pod所在宿主機(jī)的目錄,將被用于同期中mount的目錄
      secret:      #類(lèi)型為secret的存儲(chǔ)卷,掛載集群與定義的secret對(duì)象到容器內(nèi)部
        scretname: string  
        items:     
        - key: string
          path: string
      configMap:     #類(lèi)型為configMap的存儲(chǔ)卷,掛載預(yù)定義的configMap對(duì)象到容器內(nèi)部
        name: string
        items:
        - key: string
          path: string

2、探針

apiVersion: v1
kind: Pod
metadata:
  name: liveness-exce
  namespace: default
spec:
  containers:
  - name: liveness
    image: busybox
    imagePullPolicy: IfNotPresent
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy;sleep 600
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 5                            # pod啟動(dòng)延遲5秒后探測(cè)
      periodSeconds: 5                                          # 每5秒探測(cè)1次

    livenessProbe:
      httpGet:                          # 使用httpGet方式
        port: http                      # http協(xié)議,也可以直接寫(xiě)80端口
        path: /index.html               # 探測(cè)家目錄下的index.html
      initialDelaySeconds: 3            # 延遲3秒開(kāi)始探測(cè)
      periodSeconds: 5                  # 每隔5s鐘探測(cè)一次

    livenessProbe:
      tcpSocket:                        # 使用tcp連接方式
        port: 80                        # 連接80端口進(jìn)行探測(cè)
      initialDelaySeconds: 3
      periodSeconds: 5
      
    readinessProbe:                     # 這里由liveness換成了readiness
      httpGet:
        port: http
        path: /index.html
      initialDelaySeconds: 3
      periodSeconds: 5

    livenessProbe:
      httpGet:
        port: http
        path: /index.html
      initialDelaySeconds: 1
      periodSeconds: 3
    readinessProbe:
      httpGet:
        port: http
        path: /index.html
      initialDelaySeconds: 5
      periodSeconds: 5

3、post-start、pre-stop

容器啟動(dòng)前和停止前執(zhí)行的操作:

apiVersion: v1
kind: Pod
metadata:
  name: prestop
  namespace: default
spec:
  containers:
  - name: prestop
    image: nginx:1.15-alpine
    imagePullPolicy: IfNotPresent
    lifecycle:                                       # 生命周期事件
      preStop:                                       # preStop
        exec:
          command: ["/bin/sh","-c","sleep 60000000"]     # 容器終止前sleep 60000000秒
      postStart:
        exec:
          command: ["mkdir","-p","/usr/share/nginx/html/haha"]

二、Controller

1、Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment  # Deployment 的名稱(chēng)
spec:
  replicas: 3  # 副本數(shù)
  selector:
    matchLabels:
      app: my-app  # 用于選擇 Pod 的標(biāo)簽,表示deployment和rs控制器控制帶有此標(biāo)簽的pod
  template:		# pod配置模板
    metadata:
      labels:
        app: my-app  # Pod 的標(biāo)簽,用于與選擇器匹配
    spec:
      containers:
      - name: my-container  # 容器的名稱(chēng)
        image: nginx  # 使用的容器鏡像
        ports:
        - containerPort: 80  # 容器內(nèi)部暴露的端口號(hào)
          protocol: TCP  # 端口的協(xié)議類(lèi)型
        resources:  # 容器所需的資源限制和需求
          limits:
            cpu: "0.5"  # CPU 使用上限
            memory: "256Mi"  # 內(nèi)存使用上限
          requests:
            cpu: "0.2"  # CPU 最小需求
            memory: "128Mi"  # 內(nèi)存最小需求
        env:  # 容器的環(huán)境變量
        - name: ENV_VAR1
          value: value1
        - name: ENV_VAR2
          valueFrom:
            secretKeyRef:
              name: my-secret  # 引用的 Secret 對(duì)象的名稱(chēng)
              key: secret-key  # 從 Secret 對(duì)象中獲取的鍵名
        volumeMounts:  # 容器的掛載路徑
        - name: data-volume  # 掛載的卷的名稱(chēng)
          mountPath: /data  # 掛載的路徑
      volumes:  # Pod 的卷
      - name: data-volume  # 卷的名稱(chēng)
        emptyDir: {}  # 空的卷,生命周期與 Pod 相關(guān)聯(lián)

# 可以添加 metadata.annotations 字段用于存放其他注釋信息
metadata:
  annotations:
    description: This is a sample Deployment configuration file.  # 描述該配置文件的注釋

2、StatefulSet

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: my-statefulset  # StatefulSet 的名稱(chēng)
spec:
  selector: 
    matchLabels:
      app: my-app  # 匹配標(biāo)簽,用于選擇要管理的 Pod
  serviceName: my-service  # Headless Service 的名稱(chēng)
  replicas: 3  # 副本數(shù)
  template:
    metadata:
      labels:
        app: my-app  # Pod 的標(biāo)簽
    spec:
      containers:
        - name: my-container  # 容器的名稱(chēng)
          image: nginx  # 容器的鏡像
          ports:
            - containerPort: 80  # 容器監(jiān)聽(tīng)的端口號(hào)
          volumeMounts:
            - name: data-volume  # 掛載卷的名稱(chēng)
              mountPath: /data  # 掛載到容器中的路徑
  volumeClaimTemplates:
    - metadata:
        name: data-volume  # 持久化存儲(chǔ)卷模板的名稱(chēng)
      spec:
        accessModes:
          - ReadWriteOnce  # 訪問(wèn)模式
        resources:
          requests:
            storage: 1Gi  # 存儲(chǔ)容量

StatefulSet 是用于管理有狀態(tài)應(yīng)用程序的控制器,它保證 Pod 的唯一性和穩(wěn)定性,并按照序號(hào)進(jìn)行命名。

在上述示例中,創(chuàng)建了一個(gè)包含 3 個(gè)副本的 StatefulSet,每個(gè)副本都會(huì)被命名為 my-statefulset-{0…2}。

StatefulSet 是用于管理有狀態(tài)應(yīng)用程序的控制器,它保證 Pod 的唯一性和穩(wěn)定性,并按照序號(hào)進(jìn)行命名。

在上述示例中,創(chuàng)建了一個(gè)包含 3 個(gè)副本的 StatefulSet,每個(gè)副本都會(huì)被命名為 my-statefulset-{0…2}。

3、DaemonSet

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: my-daemonset  # DaemonSet 的名稱(chēng)
spec:
  selector:
    matchLabels:
      app: my-app  # 匹配標(biāo)簽,用于選擇要管理的節(jié)點(diǎn)上的 Pod
  template:
    metadata:
      labels:
        app: my-app  # Pod 的標(biāo)簽
    spec:
      containers:
        - name: my-container  # 容器的名稱(chēng)
          image: nginx  # 容器的鏡像
          ports:
            - containerPort: 80  # 容器監(jiān)聽(tīng)的端口號(hào)
          volumeMounts:
            - name: data-volume  # 掛載卷的名稱(chēng)
              mountPath: /data  # 掛載到容器中的路徑
      nodeSelector:
        disktype: ssd  # 節(jié)點(diǎn)的標(biāo)簽選擇器,用于選擇帶有指定標(biāo)簽的節(jié)點(diǎn)
  updateStrategy:
    type: RollingUpdate  # 更新策略為滾動(dòng)更新
    rollingUpdate:
      maxUnavailable: 1  # 在更新期間最多允許一個(gè) Pod 不可用
  volumeClaimTemplates:
    - metadata:
        name: data-volume  # 持久化存儲(chǔ)卷模板的名稱(chēng)
      spec:
        accessModes:
          - ReadWriteOnce  # 訪問(wèn)模式
        resources:
          requests:
            storage: 1Gi  # 存儲(chǔ)容量

DaemonSet 是用于在每個(gè)節(jié)點(diǎn)上運(yùn)行一個(gè) Pod 的控制器,它保證每個(gè)節(jié)點(diǎn)上都有一個(gè)唯一的 Pod 進(jìn)行運(yùn)行,并自動(dòng)適應(yīng)節(jié)點(diǎn)變化。

在上述示例中,創(chuàng)建了一個(gè) DaemonSet,每個(gè)節(jié)點(diǎn)上都會(huì)運(yùn)行一個(gè) Pod,該 Pod 將被命名為 my-daemonset-{node-name}。

DaemonSet 還包含了 volumeClaimTemplates 字段,用于定義持久化存儲(chǔ)卷模板。

在上述示例中,使用了一個(gè)名為 data-volume 的持久化存儲(chǔ)卷模板,訪問(wèn)模式為 ReadWriteOnce,存儲(chǔ)容量為 1GB。Pod 將根據(jù)該模板創(chuàng)建一個(gè)與之對(duì)應(yīng)的持久化存儲(chǔ)卷。

通過(guò)使用 DaemonSet 和持久化存儲(chǔ)卷,可以在集群的每個(gè)節(jié)點(diǎn)上運(yùn)行一個(gè) Pod,并確保應(yīng)用程序的數(shù)據(jù)持久化和可靠性存儲(chǔ)。

由于 DaemonSet 會(huì)自動(dòng)適應(yīng)節(jié)點(diǎn)變化,因此在增加或刪除節(jié)點(diǎn)時(shí),應(yīng)用程序的數(shù)據(jù)不會(huì)丟失或受影響。

4、Job

apiVersion: batch/v1
kind: Job
metadata:
  name: my-job  # Job 的名稱(chēng)
spec:
  completions: 1  # 完成的任務(wù)數(shù)
  parallelism: 1  # 并行運(yùn)行的 Pod 數(shù)量
  template:
    metadata:
      name: my-pod  # Pod 的名稱(chēng)
    spec:
      restartPolicy: Never  # 不重啟容器
      containers:
        - name: my-container  # 容器的名稱(chēng)
          image: nginx  # 容器的鏡像
          command: ["echo", "Hello, world!"]  # 容器啟動(dòng)命令
      volumes:
        - name: data-volume  # 卷的名稱(chēng)
          emptyDir: {}  # 空的臨時(shí)卷
  backoffLimit: 3  # 重試次數(shù)上限

Job 是用于在 Kubernetes 中運(yùn)行一次性任務(wù)的控制器。

在上述示例中,創(chuàng)建了一個(gè) Job,其中包含一個(gè) Pod,Pod 中運(yùn)行了一個(gè)名為 my-container 的容器,該容器使用 nginx 鏡像,并執(zhí)行了 echo “Hello, world!” 命令。

Job 的配置還包括一些重要的字段,如 completions(完成的任務(wù)數(shù))和 parallelism(并行運(yùn)行的 Pod 數(shù)量)。completions 字段指定了 Job 完成的任務(wù)數(shù),一旦達(dá)到該數(shù)量,Job 就會(huì)被標(biāo)記為成功。parallelism 字段指定了同時(shí)運(yùn)行的 Pod 數(shù)量,可以控制并行執(zhí)行任務(wù)的速度。

另外,還有一些其他常用的字段,例如 restartPolicy(容器的重啟策略),volumes(卷的定義)和 backoffLimit(重試次數(shù)上限)。這些參數(shù)可以根據(jù)業(yè)務(wù)需求進(jìn)行調(diào)整和配置。

通過(guò)使用 Job 控制器,可以在 Kubernetes 中運(yùn)行一次性任務(wù),并確保任務(wù)的完成和可靠性運(yùn)行。由于 Job 可以指定任務(wù)數(shù)量和并行度,可以很好地適應(yīng)不同規(guī)模和要求的任務(wù)場(chǎng)景。

5、ConJob

apiVersion: batch/v1beta1  # 使用的 API 版本
kind: CronJob  # CronJob 類(lèi)型
metadata:
  name: my-cronjob  # CronJob 的名稱(chēng)
spec:
  schedule: "*/1 * * * *"  # Cron 表達(dá)式,用于定義作業(yè)執(zhí)行的時(shí)間表
  jobTemplate:  # 作業(yè)模板,指定 CronJob 創(chuàng)建的作業(yè)配置
    spec:
      template:
        metadata:
          name: my-job  # 作業(yè)的名稱(chēng)
        spec:
          restartPolicy: OnFailure  # 容器的重啟策略
          containers:
            - name: my-container  # 容器的名稱(chēng)
              image: nginx  # 容器的鏡像
              command: ["echo", "Hello, world!"]  # 容器啟動(dòng)命令
  successfulJobsHistoryLimit: 5  # 歷史成功作業(yè)保存的數(shù)量上限
  failedJobsHistoryLimit: 5  # 歷史失敗作業(yè)保存的數(shù)量上限

CronJob 是 Kubernetes 中的一種控制器,用于定期運(yùn)行作業(yè)。在上述示例中,創(chuàng)建了一個(gè) CronJob,其中定義了一個(gè) Cron 表達(dá)式 */1 * * * *,表示每分鐘執(zhí)行一次作業(yè)。

CronJob 的配置還包括使用 jobTemplate 指定了創(chuàng)建作業(yè)的模板。在這個(gè)模板中,指定了作業(yè)的 Pod 配置,其中包含一個(gè)名為 my-container 的容器,使用 nginx 鏡像,并執(zhí)行了 echo “Hello, world!” 命令。

除了基本的配置外,還有一些其他常用的字段。例如,successfulJobsHistoryLimit 和 failedJobsHistoryLimit 字段分別指定歷史成功和失敗作業(yè)保存的數(shù)量上限,可以根據(jù)需求進(jìn)行調(diào)整。

通過(guò)使用 CronJob 控制器,可以定期運(yùn)行作業(yè),并對(duì)作業(yè)的運(yùn)行情況進(jìn)行管理和記錄。CronJob 的配置文件中的注釋可以幫助我們理解每個(gè)字段的含義和作用,方便后續(xù)管理和維護(hù)。

三、Service

1、ClusterIP

當(dāng)服務(wù)的類(lèi)型為 ClusterIP 時(shí),它會(huì)為集群內(nèi)部的其他組件分配一個(gè)虛擬 IP 地址,并使用服務(wù)監(jiān)聽(tīng)端口來(lái)接收來(lái)自其他組件的請(qǐng)求。這樣,其他 Pod 或服務(wù)就可以通過(guò)服務(wù)的虛擬 IP 地址和監(jiān)聽(tīng)端口與服務(wù)進(jìn)行通信。

kind: Service
apiVersion: v1
metadata:
  name: my-service
  namespace: app # namespace
spec:
  type: ClusterIP
  #clusterIP: None # None代表是無(wú)頭service
  ports:
    - port: 8080  # 集群內(nèi)部的服務(wù)監(jiān)聽(tīng)端口
      targetPort: 80  # Pod 內(nèi)部的端口
  selector: # 標(biāo)簽選擇器
    app: my-app  # 指向該標(biāo)簽的pod
  sessionAffinity: ClientIP # sessionAffinity為Clientip (類(lèi)似nginx的ip_hash算法,lvs的sh算法)

服務(wù)名稱(chēng)為 my-service,類(lèi)型為 ClusterIP,它監(jiān)聽(tīng)端口 8080,并將請(qǐng)求轉(zhuǎn)發(fā)到 Pod 內(nèi)部的 80 端口。其他組件可以通過(guò)訪問(wèn) my-service:8080 來(lái)與服務(wù)進(jìn)行通信。

需要注意的是,集群內(nèi)部的服務(wù)監(jiān)聽(tīng)端口通常是在集群內(nèi)部使用的端口,不直接暴露給外部請(qǐng)求。

如果您需要將服務(wù)公開(kāi)到集群外部,可以考慮使用其他類(lèi)型的服務(wù),如 NodePort 或 LoadBalancer。

擴(kuò)展:

  • ClusterIP根據(jù)是否生成ClusterIP又可分為普通Service和Headless Service。
  • 普通的ClusterIP service是service name解析為cluster ip,然后cluster ip對(duì)應(yīng)到后面的pod ip。
  • Headless service是指service name 直接解析為后面的pod ip。實(shí)際上Headless service用處不大,dns貌似沒(méi)效果需要額外配置

2、NodePort

在NodePort的YAML文件中,ports 下的 port 字段表示服務(wù)在集群內(nèi)部使用的端口號(hào)。這是服務(wù)對(duì)內(nèi)提供服務(wù)的端口,其他 Pod 可以通過(guò)該端口與服務(wù)進(jìn)行通信。

nodePort 字段表示服務(wù)在節(jié)點(diǎn)上公開(kāi)的端口號(hào)。當(dāng)服務(wù)類(lèi)型為 NodePort 時(shí),Kubernetes 隨機(jī)分配一個(gè)未使用的端口號(hào),并將該端口號(hào)映射到每個(gè)節(jié)點(diǎn)上。這樣,您可以通過(guò)節(jié)點(diǎn)的 IP 地址和 nodePort 端口號(hào)來(lái)訪問(wèn)服務(wù)。

targetPort 字段是服務(wù)所指向的 Pod 的端口。當(dāng)請(qǐng)求到達(dá) nodePort 監(jiān)聽(tīng)的端口時(shí),它將被轉(zhuǎn)發(fā)到目標(biāo)端口(targetPort)上的 Pod 進(jìn)行處理。

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 8080
      nodePort: 30000
  selector:
    app: my-app# 指向該標(biāo)簽的pod

該示例中,服務(wù)名稱(chēng)為 my-service,通過(guò) NodePort 類(lèi)型將集群中的應(yīng)用程序暴露到節(jié)點(diǎn)的 30000 端口上。集群內(nèi)部的服務(wù)監(jiān)聽(tīng)端口為 80,將請(qǐng)求轉(zhuǎn)發(fā)到 Pod 上的 8080 端口。

請(qǐng)注意,NodePort 的端口范圍是 30000-32767,確保選擇一個(gè)未被占用的端口號(hào)。

3、LoadBalancer

需要部署額外的負(fù)載均衡器。

apiVersion: v1
kind: Service
metadata:
  name: my-service  # Service 的名稱(chēng)
spec:
  selector:
    app: my-app  # 選擇要路由到的 Pod 的標(biāo)簽
  ports:
  - name: http  # 端口的名稱(chēng)
    protocol: TCP  # 端口的協(xié)議類(lèi)型
    port: 80  # Service 暴露的端口號(hào)
    targetPort: 8080  # 路由到的 Pod 的端口號(hào)
  type: LoadBalancer  # Service 的類(lèi)型,可以是 ClusterIP、NodePort 或者 LoadBalancer

4、ExternalName

把集群外部的服務(wù)引入到集群內(nèi)部中來(lái),實(shí)現(xiàn)了集群內(nèi)部pod和集群外部的服務(wù)進(jìn)行通信。

ExternalName 類(lèi)型的服務(wù)適用于外部服務(wù)使用域名的方式,缺點(diǎn)是不能指定端口

還有一點(diǎn)要注意: 集群內(nèi)的Pod會(huì)繼承Node上的DNS解析規(guī)則。所以只要Node可以訪問(wèn)的服務(wù),Pod中也可以訪問(wèn)到, 這就實(shí)現(xiàn)了集群內(nèi)服務(wù)訪問(wèn)集群外服務(wù)

apiVersion: v1
kind: Service
metadata:
  name: my-externalname
  namespace: default
spec:
  type: ExternalName
  externalName: www.baidu.com                  # 對(duì)應(yīng)的外部域名為www.baidu.com

四、Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress  # Ingress 的名稱(chēng)
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1  # 添加 NGINX Ingress 控制器的注解,用于重寫(xiě) URL
spec:
  rules:
  - host: example.com  # 定義要匹配的域名
    http:
      paths:
      - path: /appA  # URL 路徑
        pathType: Prefix  # 路徑匹配類(lèi)型,可以是 Prefix 或 Exact
        backend:
          service:
            name: appA-service  # 要路由到的 Service 的名稱(chēng)
            port:
              number: 80  # 路由到的 Service 的端口號(hào)
      - path: /appB(/|$)(.*)  # 使用正則表達(dá)式匹配 URL 路徑
        pathType: Prefix  # 路徑匹配類(lèi)型,可以是 Prefix 或 Exact
        backend:
          service:
            name: appB-service  # 要路由到的 Service 的名稱(chēng)
            port:
              number: 80  # 路由到的 Service 的端口號(hào)
              

五、ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-configmap  # ConfigMap 的名稱(chēng)
data:
  server.conf: |
    # Server 配置文件
    port=8080
    host=localhost
  client.conf: |
    # Client 配置文件
    timeout=5000
    retries=3

需要注意的是,

ConfigMap 的配置文件可以包含多個(gè)鍵值對(duì),鍵名和對(duì)應(yīng)的值可以是任意字符串類(lèi)型,例如文件內(nèi)容、環(huán)境變量、命令行參數(shù)等。

在使用 ConfigMap 時(shí),可以將其掛載到 Pod 中的容器內(nèi),從而使容器可以輕松地訪問(wèn)配置信息。

為了更好地管理和維護(hù) ConfigMap,建議使用有意義的名稱(chēng)和注釋對(duì)其進(jìn)行命名和描述。

六、Secret

apiVersion: v1
kind: Secret
metadata:
  name: my-secret  # Secret 的名稱(chēng)
type: Opaque  # Secret 類(lèi)型(Opaque 表示任意類(lèi)型)
data:
  username: dXNlcm5hbWU=  # 加密后的用戶(hù)名
  password: cGFzc3dvcmQ=  # 加密后的密碼

Secret 的配置文件包含敏感信息,如用戶(hù)名、密碼等,需要進(jìn)行加密處理。在 YAML 文件中,可以將敏感信息以 base64 編碼的方式保存在 data 字段中,以保證安全性。

七、Volume

apiVersion: v1
kind: Pod
metadata:
  name: my-pod  # Pod 的名稱(chēng)
spec:
  containers:
    - name: my-container  # 容器的名稱(chēng)
      image: nginx  # 容器的鏡像
      volumeMounts:
        - name: data-volume  # 掛載卷的名稱(chēng)
          mountPath: /data  # 掛載到容器中的路徑
  volumes:
    - name: data-volume  # 卷的名稱(chēng)
      emptyDir: {}  # 空目錄卷

Volume 的配置文件可以包含多個(gè)卷定義,每個(gè)卷可以是不同類(lèi)型的卷(如 emptyDir、hostPath、persistentVolumeClaim 等)。在上述示例中,使用的是 emptyDir 類(lèi)型的卷,它會(huì)在 Pod 運(yùn)行時(shí)創(chuàng)建一個(gè)空目錄,并將其掛載到容器內(nèi)的指定路徑。

訪問(wèn)模式:

在 Kubernetes 中,訪問(wèn)模式(Access Modes)是用來(lái)定義持久化存儲(chǔ)卷(Persistent Volume)的訪問(wèn)方式的。下面是 Kubernetes 支持的三種訪問(wèn)模式:

  • ReadWriteOnce(RWO):該訪問(wèn)模式表示該存儲(chǔ)卷可以被單個(gè)節(jié)點(diǎn)以讀寫(xiě)方式掛載。這意味著同一時(shí)間內(nèi)只能有一個(gè) Pod 能夠掛載并對(duì)存儲(chǔ)卷進(jìn)行讀寫(xiě)操作。當(dāng)存儲(chǔ)卷被某個(gè)節(jié)點(diǎn)上的 Pod 掛載時(shí),它將成為該節(jié)點(diǎn)的專(zhuān)屬卷,在其他節(jié)點(diǎn)上不可見(jiàn)。
  • ReadOnlyMany(ROX):該訪問(wèn)模式表示該存儲(chǔ)卷可以以只讀方式被多個(gè)節(jié)點(diǎn)掛載。多個(gè) Pod 可以共享對(duì)存儲(chǔ)卷的只讀訪問(wèn)權(quán)限,但不能進(jìn)行寫(xiě)入操作。
  • ReadWriteMany(RWX):該訪問(wèn)模式表示該存儲(chǔ)卷可以以讀寫(xiě)方式被多個(gè)節(jié)點(diǎn)掛載。多個(gè) Pod 可以同時(shí)掛載并對(duì)存儲(chǔ)卷進(jìn)行讀寫(xiě)操作,即具有讀寫(xiě)共享的功能。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解kubectl資源管理命令(陳述式)

    詳解kubectl資源管理命令(陳述式)

    kubectl是官方的CTL命令行工具,用于與apiserver進(jìn)行通信,將用戶(hù)在命令行輸入的命令,組織并轉(zhuǎn)化為apiserver能識(shí)別的信息,進(jìn)而實(shí)現(xiàn)管理k8s各種資源的一種有效途徑,這篇文章主要介紹了詳解kubectl資源管理命令(陳述式),需要的朋友可以參考下
    2025-04-04
  • Kubernetes k8s configmap 容器技術(shù)解析

    Kubernetes k8s configmap 容器技術(shù)解析

    這篇文章主要為大家介紹了k8s configmap 容器技術(shù)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • kubernetes?k8s入門(mén)定義一個(gè)Pod

    kubernetes?k8s入門(mén)定義一個(gè)Pod

    這篇文章主要為大家介紹了k8s入門(mén)定義一個(gè)Pod以及破底的定義內(nèi)容詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多計(jì)步,早日升職加薪
    2022-03-03
  • K8S中某個(gè)容器突然出現(xiàn)內(nèi)存和CPU占用過(guò)高的問(wèn)題及解決方案

    K8S中某個(gè)容器突然出現(xiàn)內(nèi)存和CPU占用過(guò)高的問(wèn)題及解決方案

    當(dāng)K8S容器出現(xiàn)資源過(guò)載時(shí),可通過(guò)kubectl監(jiān)控定位問(wèn)題,調(diào)整資源限制,優(yōu)化應(yīng)用代碼,拆分多應(yīng)用容器,利用監(jiān)控工具排查,實(shí)施水平擴(kuò)展或遷移負(fù)載,確保集群穩(wěn)定運(yùn)行
    2025-07-07
  • K8s環(huán)境內(nèi)部的服務(wù)如何注冊(cè)到外部

    K8s環(huán)境內(nèi)部的服務(wù)如何注冊(cè)到外部

    文章主要討論了在K8s環(huán)境外部部署服務(wù)時(shí)如何與部署在K8s內(nèi)部的服務(wù)進(jìn)行服務(wù)注冊(cè),提出了使用LoadBalancer、Kong和NodePort三種方式,并詳細(xì)介紹了每種方式的實(shí)現(xiàn)步驟和注意事項(xiàng)
    2026-02-02
  • k8s證書(shū)過(guò)期時(shí)間掃描方式

    k8s證書(shū)過(guò)期時(shí)間掃描方式

    該文章介紹了多種檢查Kubernetes證書(shū)過(guò)期時(shí)間的方法,包括使用openssl命令、kubeadm工具、Shell腳本、Kubernetes API等,文章還提到了一些第三方工具,如cert-manager、kube-cert-manager和PrometheusSSLExporter,以及關(guān)鍵證書(shū)的位置
    2025-10-10
  • kubernetes k8s 存儲(chǔ)動(dòng)態(tài)掛載配置詳解

    kubernetes k8s 存儲(chǔ)動(dòng)態(tài)掛載配置詳解

    這篇文章主要為大家介紹了kubernetes k8s 存儲(chǔ)動(dòng)態(tài)掛載配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • K8S?中?kubectl?命令詳解

    K8S?中?kubectl?命令詳解

    這篇文章主要介紹了K8S?中?kubectl?命令,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • MinIO使用基礎(chǔ)教程(最新整理)

    MinIO使用基礎(chǔ)教程(最新整理)

    文章介紹了MinIO云存儲(chǔ)服務(wù)的快速安裝和使用,并通過(guò)SpringBoot實(shí)現(xiàn)文件上傳和查詢(xún)的功能,感興趣的朋友跟隨小編一起看看吧
    2025-03-03
  • 淺談Spark RDD API中的Map和Reduce

    淺談Spark RDD API中的Map和Reduce

    rdd是什么?如何創(chuàng)建?什么是map和reduce?本文就這些問(wèn)題向大家作了一些分析,供大家參考,如有不足,歡迎指出。
    2017-10-10

最新評(píng)論

北流市| 麻栗坡县| 望都县| 清原| 台南县| 凤冈县| 灵武市| 磐石市| 滨海县| 三亚市| 读书| 昭苏县| 邵武市| 江山市| 图片| 汽车| 东港市| 金溪县| 莒南县| 长沙市| 黄龙县| 阳朔县| 礼泉县| 黄陵县| 垣曲县| 凤城市| 辽宁省| 明光市| 西城区| 云和县| 广元市| 赫章县| 沧州市| 凌云县| 中方县| 岚皋县| 霍城县| 农安县| 尖扎县| 罗田县| 天全县|