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

【Java】基于fabric8io庫操作k8s集群實戰(zhàn)(pod、deployment、service、volume)

這篇具有很好參考價值的文章主要介紹了【Java】基于fabric8io庫操作k8s集群實戰(zhàn)(pod、deployment、service、volume)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

一開始了解到Java Api庫操作k8s集群,有兩個,分別為:

  • kubernetes-client/java
  • fabric8io/kubernetes-client

但個人對比使用了兩個發(fā)現(xiàn),還是fabric8io更易用,用的人多是有道理的,fabric8io和yaml文件十分貼切,所以通俗易懂。本文前提是已配置好集群,已經(jīng)熟悉了kubectl工具常用命令。

首先,需要導(dǎo)入fabric8io依賴核心庫,如下:

<dependency>
    <groupId>io.fabric8</groupId>
    <artifactId>kubernetes-client</artifactId>
    <version>6.3.1</version>
</dependency>

注:本文采用6.3.1版本,截止2023年12月14日,官方最新版本為6.9.2版本,如果你k8s是最新版本,那么可考慮最新版本。

如果你需要看官方api操作文檔,可參考:官方使用說明

如果你初學(xué)k8s,關(guān)于k8s的基本概念和常用操作不熟,強推先讀另一個博主的文章:Kubernetes核心概念及命令使用

一、基于fabric8io操作pod

定義:pod 是包含一個或多個容器的容器組,是 Kubernetes 中創(chuàng)建和管理的最小對象。

1.1 yaml創(chuàng)建pod

如果我們在k8s集群上創(chuàng)建一個pod,常常會編寫yaml文件,例如deploy.yaml

apiVersion: v1  
kind: Pod  
metadata:  
  name: cm-nginx
  labels:  
    app: cm-nginx
spec:  
  containers:  
  - name: nginx
    image: nginx:latest
    ports:  
    - containerPort: 80

編寫好后執(zhí)行:kubectl apply -f deploy.yaml,就會創(chuàng)建一個pod

1.2 fabric8io創(chuàng)建pod案例

首先,需要在k8s集群master上獲取到/root/.kube/config文件,文件內(nèi)容大致如下,證書密鑰太長,省略,這個文件記錄了連接k8s集群的信息,fabric8io操作集群就需要該文件。

注:只要你需要連接集群,就需要基于config文件,下載下來

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0t..............
    server: https://192.168.20.130:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJVENDQWdtZ................
    client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVk.................

將config文件下載到本地,就可以對pod進行CRUD操作,本文放在resources目錄下

import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.api.model.PodBuilder;
import io.fabric8.kubernetes.client.Config;
import io.fabric8.kubernetes.client.DefaultKubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClient;
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.nio.charset.StandardCharsets;

public class PodCrudExample {
    public static void main(String[] args) {
        String kubeConfigPath  = "D:\\IDEAProject\\k8sApi\\src\\main\\resources\\config";
        KubernetesClient client;

        try {
            client = new DefaultKubernetesClient(Config.fromKubeconfig(FileUtils.readFileToString(new File(kubeConfigPath), StandardCharsets.UTF_8)));

            // 創(chuàng)建 Pod
            // createPod(client);

            // 讀取 Pod
            // readPod(client);

            // 更新 Pod
            // updatePod(client);

            // 刪除 Pod
            // deletePod(client);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void createPod(KubernetesClient client) {
        // 創(chuàng)建 Pod 對象
        Pod pod = new PodBuilder()
                .withNewMetadata().withName("my-pod-nginx").endMetadata()
                .withNewSpec()
                .addNewContainer()
                .withName("nginx")
                .withImage("nginx:latest")
                .endContainer()
                .endSpec()
                .build();

        // 在指定的命名空間中創(chuàng)建 Pod
        client.pods().inNamespace("default").resource(pod).create();
        System.out.println("Pod created successfully.");
    }

    private static void readPod(KubernetesClient client) {
        // 讀取 Pod
        Pod pod = client.pods().inNamespace("default").withName("my-pod-nginx").get();
        System.out.println("Pod read successfully:");
        System.out.println(pod);
    }

    private static void updatePod(KubernetesClient client) {
        // k8s禁止直接對容器中鏡像進行更新操作,k8s更新本質(zhì)還是刪除原有的,然后根據(jù)配置創(chuàng)建新的

        // 刪除舊的 Pod
        client.pods().inNamespace("default").withName("my-pod-nginx").delete();

        // 創(chuàng)建新的 Pod 對象
        Pod pod = new PodBuilder()
                .withNewMetadata().withName("my-pod-tomcat").endMetadata()
                .withNewSpec()
                .addNewContainer()
                .withName("tomcat")
                .withImage("tomcat:latest")
                .endContainer()
                .endSpec()
                .build();

        // 在指定的命名空間中創(chuàng)建新的 Pod
        client.pods().inNamespace("default").resource(pod).create();

        System.out.println("Pod updated successfully.");
    }

    private static void deletePod(KubernetesClient client) {
        // 刪除 Pod,默認關(guān)閉期限30秒,即最多等待30秒
        // 這涉及k8s提供的優(yōu)雅終止機制,允許容器有時間完成必要的清理工作
        client.pods().inNamespace("default").withName("my-pod-tomcat").delete();
    }
}

上面是創(chuàng)建一個普通的pod,無自愈、容災(zāi)等能力,一般我們會用deployment方式創(chuàng)建,deployment創(chuàng)建會在第二節(jié)【基于fabric8io創(chuàng)建Service】一并寫到,因為Service和Deployment一般是一起使用的

二、基于fabric8io創(chuàng)建Service(含Deployment)

概念網(wǎng)絡(luò)訪問歸Service管理,它用于定義一組 Pod 并提供這些 Pod 的穩(wěn)定訪問點,主要用于服務(wù)發(fā)現(xiàn)和負載均衡。

Service 可以有不同的類型,其中最常見的兩種類型是 ClusterIP (默認)和 NodePort。

  • 當(dāng)你創(chuàng)建一個 Service,類型為 ClusterIP 時,K8s 會為該 Service 分配一個集群地址(集群內(nèi)部使用,外部不可見
  • NodePort 類型的 Service 具有 ClusterIP 的所有特性,同時還會在每個集群節(jié)點上映射一個靜態(tài)端口(NodePort),這使得外部流量可以通過任何集群節(jié)點的 NodePort 訪問 Service(外部可訪問

2.1 yaml創(chuàng)建Service和Deployment

(1)先用Deployment創(chuàng)建兩個pod副本,deploy_dep.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: my-dep
  name: my-dep
spec:
  replicas: 2	# 副本數(shù)
  selector:
    matchLabels:
      app: my-dep
  template:	# 創(chuàng)建pod模板
    metadata:
      labels:
        app: my-dep
    spec:
      containers:
      - image: nginx
        name: nginx

(2)創(chuàng)建Service,deploy_svc.yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    app: my-dep
  name: my-svc
spec:
  selector:
    app: my-dep	# 表示選擇只代理具有標(biāo)簽(鍵值對)app: my-dep的pod
  ports:
  - port: 8000	# 表示 Service 在集群內(nèi)部監(jiān)聽的端口
    targetPort: 80	# 表示將 Service 接收到的流量轉(zhuǎn)發(fā)到 Pod 的 80 端口
  type: NodePort

kubectl apply -f xxx.yaml,先后執(zhí)行Deployment和Service

如圖,訪問時會輪巡方式,將接收到的流量轉(zhuǎn)發(fā)到對應(yīng)兩個pod的80端口(targetPort)
java代碼使用fabric8創(chuàng)建k8s中的pod和server,k8s,kubernetes,容器,云原生,java
由于配置的是NodePort,所以在瀏覽器輸入任意節(jié)點ip:暴露的端口號,官方規(guī)定了NodePort范圍在 30000-32767 之間,這里分配的是32385,那么公網(wǎng)通過該端口可以訪問到集群,公網(wǎng)的流量都會經(jīng)過NodePort暴露的32385端口,轉(zhuǎn)發(fā)到targetPort,即80端口。

總結(jié):Service就像一個網(wǎng)關(guān),只負責(zé)網(wǎng)絡(luò)流量的分配和轉(zhuǎn)發(fā),比如將流量轉(zhuǎn)發(fā)到部署的兩個pod中,兩個pod中目前部署的都是nginx容器。

2.2 fabric8io創(chuàng)建service案例

import io.fabric8.kubernetes.api.model.*;
import io.fabric8.kubernetes.api.model.apps.*;
import io.fabric8.kubernetes.client.*;
import io.fabric8.kubernetes.client.Config;
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;

public class KubernetesDeployer {

    public static void main(String[] args) {
        String kubeConfigPath  = "D:\\IDEAProject\\k8sApi\\src\\main\\resources\\config";
        KubernetesClient client;

        try {
            client = new DefaultKubernetesClient(Config.fromKubeconfig(FileUtils.readFileToString(new File(kubeConfigPath), StandardCharsets.UTF_8))).inNamespace("default");

            // 1、創(chuàng)建 Deployment(2個pod)
            Map<String, String> labels = new HashMap();
            labels.put("app", "my-dep-fabric8");

            Deployment deployment = new DeploymentBuilder()
                    .withNewMetadata()
                        .withName("my-dep-fabric8")
                        .withLabels(labels)
                    .endMetadata()
                    .withNewSpec()
                        .withReplicas(2)
                        .withNewSelector()
                            .withMatchLabels(labels)
                        .endSelector()
                        .withNewTemplate()
                            .withNewMetadata()
                                .withLabels(labels)
                            .endMetadata()
                            .withNewSpec()
                                .withContainers(
                                        new ContainerBuilder()
                                            .withName("mynginx")
                                            .withImage("nginx")
                                            .build()
                                )
                            .endSpec()
                        .endTemplate()
                    .endSpec()
                    .build();

            client.apps().deployments().inNamespace("default").resource(deployment).create();

            // 2、創(chuàng)建 Service
            Service service = new ServiceBuilder()
                    .withNewMetadata()
                        .withName("my-svc-fabric8")
                    .withLabels(labels) // 代理具有l(wèi)abels標(biāo)簽的pod
                    .endMetadata()
                    .withNewSpec()
                        .withSelector(labels)
                        .withPorts(new ServicePortBuilder()
                                        .withPort(8000) // 集群內(nèi)部監(jiān)聽的端口
                                        .withNewTargetPort(80)  // 流量轉(zhuǎn)發(fā)的目標(biāo)端口
                                        .build())
                        .withType("NodePort")
                    .endSpec()
                    .build();

            client.services().inNamespace("default").resource(service).create();

            System.out.println("Service Create Successfully");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

創(chuàng)建后,設(shè)置了NodePort,故用Ip+NodePort可以公網(wǎng)訪問,但是兩個nginx默認index.html都是Welcome to nginx,可以用echo "11112222" > index.html改動一個nginx容器的index.html頁面。

注:用kubectl exec -it pod_name -- /bin/bash進入容器,默認這個頁面就在/usr/shared/nginx/html/下。
java代碼使用fabric8創(chuàng)建k8s中的pod和server,k8s,kubernetes,容器,云原生,java

三、基于fabric8io操作Volume

概念:存儲卷(Volume)分為臨時卷持久卷,在 Kubernetes 中,Volume 是一種抽象,用于表示容器中可以訪問的存儲。

PV(PersistentVolume)

持久卷是集群級別的資源,它是集群中的一塊持久化存儲資源,可以由多個 Pod 共享。PV 可以來自集群中的各種存儲后端,比如云存儲、網(wǎng)絡(luò)存儲、本地存儲等。PV 與實際的存儲資源相對應(yīng)。

PVC(PersistentVolumeClaim)

PersistentVolumeClaim 是對持久化存儲資源的聲明。它是一個請求,用于獲取持久 Volume 的一部分或全部存儲容量。PVC 允許開發(fā)者聲明對存儲資源的需求,而不用關(guān)心底層存儲是如何實現(xiàn)的。

關(guān)系

PersistentVolumeClaim 是對存儲資源的聲明,而 Volume實際的存儲資源。開發(fā)者通過 PVC 聲明存儲需求,并請求系統(tǒng)提供符合這些需求的 PersistentVolume(PV,實際存儲卷)。

PV生命周期狀態(tài)

Available(可用)、Bound(已綁定)、Released(已釋放)、Failed(失?。?/p>

總結(jié):即一個負責(zé)申明存儲,一個是實際存儲資源

3.1 yaml配置掛載存儲卷

(1)創(chuàng)建一個 PersistentVolume(PV),類型為 nfs

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-nfs-pv
spec:
  capacity:
    storage: 300Mi	# 允許多個 Pod 以讀寫多模式訪問,i是二進制
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  storageClassName: nfs
  nfs:
    server: 192.168.20.133   # NFS 服務(wù)器地址
    path: /nfs/data/shared/  # 共享的目錄

(2)創(chuàng)建 PersistentVolumeClaim (PVC)來請求使用這個 NFS 存儲卷

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-nfs-pvc01
  labels:
    app: my-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 200Mi	# Kubernetes 推薦使用二進制單位i,以避免混淆,確保一致性
  storageClassName: nfs

(3)創(chuàng)建Pod(可多個)

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: mynginx
      image: nginx
      volumeMounts:
        - name: pvc-html	# 這里的 name 對應(yīng) volumes 中的 name
          mountPath: "/mount/data"
  volumes:
    - name: pvc-html	# 這里的 name 是存儲卷的名稱
      persistentVolumeClaim:
        claimName: my-nfs-pvc

注:普通方式直接創(chuàng)建,此處未用Deployment創(chuàng)建pod

一旦 PVC 與 PV 綁定,Pod 只需聲明使用該 PVC,而不需要顯式綁定到 PV,Pod就能共享pvc對應(yīng)的pv存儲卷資源。

解釋:如上,pv共享目錄是/nfs/data/shared/,pvc和pv綁定后,創(chuàng)建pod容器對應(yīng)的mountPath為/mount/data,那么/nfs/data/shared/中的內(nèi)容就會掛載到pod定義的路徑/mount/data中,實現(xiàn)多個pod共享存儲卷pv中的內(nèi)容。

為什么兩個name要一致?(即例子pvc-html)

volumeMounts定義了存儲卷掛載到容器中的路徑,其中name 字段指定了與 volumes 中相應(yīng)存儲卷的名稱。這樣 K8s 就知道將哪個卷掛載到容器的哪個路徑上。如果名字不一致,pod就不知道去找哪個存儲卷掛載到對應(yīng)路徑。

java代碼使用fabric8創(chuàng)建k8s中的pod和server,k8s,kubernetes,容器,云原生,java

3.2 基于fabric8io實現(xiàn)掛載存儲卷

package com.yx.mount_volume;

import io.fabric8.kubernetes.api.model.*;
import io.fabric8.kubernetes.client.Config;
import io.fabric8.kubernetes.client.DefaultKubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClient;
import org.apache.commons.io.FileUtils;

import java.io.File;
import java.nio.charset.StandardCharsets;
import java.util.Collections;

/**
 * 掛載存儲卷
 */
public class MountVolumeExample {
    public static void main(String[] args) {
        String kubeConfigPath  = "D:\\IDEAProject\\k8sApi\\src\\main\\resources\\config";
        KubernetesClient client;

        try {
            client = new DefaultKubernetesClient(Config.fromKubeconfig(FileUtils.readFileToString(new File(kubeConfigPath), StandardCharsets.UTF_8))).inNamespace("default");

            // 1、創(chuàng)建 PersistentVolume
            PersistentVolume nfsPv = new PersistentVolumeBuilder()
                    .withNewMetadata().withName("my-pv-fabric8").endMetadata()
                    .withNewSpec()
                    .withCapacity(Collections.singletonMap("storage", new Quantity("100Mi")))
                    .withAccessModes("ReadWriteMany")
                    .withPersistentVolumeReclaimPolicy("Retain")
                    .withStorageClassName("nfs")
                    .withNfs(new NFSVolumeSourceBuilder()
                            .withServer("192.168.20.133")
                            .withPath("/nfs/data/shared/")
                            .build())
                    .endSpec()
                    .build();

            client.persistentVolumes().resource(nfsPv).create();

            // 2、創(chuàng)建 PersistentVolumeClaim
            PersistentVolumeClaim nfsPvc = new PersistentVolumeClaimBuilder()
                    .withNewMetadata()
                        .withName("my-pvc-fabric8")
                    .endMetadata()
                    .withNewSpec()
                        .withAccessModes("ReadWriteMany")
                        .withResources(new ResourceRequirementsBuilder()
                            .addToRequests("storage", new Quantity("80Mi"))
                            .build())
                        .withStorageClassName("nfs")
                    .endSpec()
                    .build();

            client.persistentVolumeClaims().resource(nfsPvc).create();

            // 3、創(chuàng)建 Pod,并掛載 PersistentVolumeClaim
            Pod pod = new PodBuilder()
                    .withNewMetadata().withName("my-pod-fabric8").endMetadata()
                    .withNewSpec()
                    .addNewContainer()
                    .withName("my-container")
                    .withImage("nginx")
                    .addNewVolumeMount()
                    .withName("pvc-fabric8")
                    .withMountPath("/mount/nginx/html/")    // 掛載到的目錄
                    .endVolumeMount()
                    .endContainer()
                    .addNewVolume()
                    .withName("pvc-fabric8")
                    .withPersistentVolumeClaim(new PersistentVolumeClaimVolumeSourceBuilder()
                            .withClaimName("my-pvc-fabric8")
                            .build())
                    .endVolume()
                    .endSpec()
                    .build();

            client.pods().inNamespace("default").resource(pod).create();

            System.out.println("Pod created successfully.");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

以上為全部內(nèi)容!有問題可以評論區(qū)交流討論噢!文章來源地址http://www.zghlxwxcb.cn/news/detail-787649.html

到了這里,關(guān)于【Java】基于fabric8io庫操作k8s集群實戰(zhàn)(pod、deployment、service、volume)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • K8S系列文章之 自動化運維利器 Fabric

    K8S系列文章之 自動化運維利器 Fabric

    Fabric 主要用在應(yīng)用部署與系統(tǒng)管理等任務(wù)的自動化,簡單輕量級,提供有豐富的 SSH 擴展接口。在 Fabric 1.x 版本中,它混雜了本地及遠程兩類功能;但自 Fabric 2.x 版本起,它分離出了獨立的 Invoke 庫,來處理本地的自動化任務(wù),而 Fabric 則聚焦于遠程與網(wǎng)絡(luò)層面的任務(wù)。 為了

    2024年02月14日
    瀏覽(39)
  • 如何基于麒麟操作系統(tǒng)(Kylin)部署K8S集群(詳細流程文檔)

    如何基于麒麟操作系統(tǒng)(Kylin)部署K8S集群(詳細流程文檔)

    序號 操作系統(tǒng)及版本 備注 1 Kylin V10 SP3 需求 CPU 內(nèi)存 硬盤 角色 主機名 值 4C 8G 100GB master k8s-master01 值 4C 8G 100GB worker(node) k8s-worker01 值 4C 8G 100GB worker(node) k8s-worker02 1.3.1 主機名配置 由于本次使用3臺主機完成kubernetes集群部署,其中1臺為master節(jié)點,名稱為k8s-master01;其中2臺為work

    2024年02月10日
    瀏覽(18)
  • k8s部署服務(wù)接入skywalking之java agent使用(基于sideCar模式)

    java應(yīng)用在接入skywalking的時候,需要在啟動參數(shù)指定 java agent的jar包 -javaagent:/usr/local/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent/skywalking-agent.jar 目前不打算將agent相關(guān)文件制作到j(luò)ava服務(wù)鏡像里面 希望通過 掛載 的方式將agent包提供出來供java服務(wù)使用 決定采用 基于sideCar 模式

    2024年02月07日
    瀏覽(23)
  • Java操作k8s api示例:使用kubeconfig文件認證;獲取所有pod;獲取pod內(nèi)應(yīng)用容器的啟動日志

    公司準(zhǔn)備將應(yīng)用容器化部署,先使用了華為云的 Kubernetes 服務(wù),后面又使用阿里云的 Kubernetes 服務(wù)。并短期一個月內(nèi)無法判斷走哪個云商。而作為一個在公司內(nèi)部用于應(yīng)用發(fā)布,部署的應(yīng)用。在對接完華為云的 Kubernetes 服務(wù) Api 后。再對接阿里云發(fā)現(xiàn)阿里云并沒用像華為云一

    2023年04月09日
    瀏覽(97)
  • failed to get sandbox image “k8s.gcr.io/pause:3.6“: failed to pull image “k8s.gcr.io/pause:3.6“

    從日志能夠看到k8s核心服務(wù)的pod創(chuàng)建失敗,因為獲取pause鏡像失敗,總是從k8s.gcr.io下載。 經(jīng)過確認,k8s 1.26中啟用了CRI sandbox(pause) image的配置支持。 之前通過kubeadm init –image-repository設(shè)置的鏡像地址,不再會傳遞給cri運行時去下載pause鏡像 而是需要在cri運行時的配置文件中設(shè)

    2024年02月16日
    瀏覽(26)
  • Ingress 資源與 networking.k8s.io/v1 問題

    Ingress 資源與 networking.k8s.io/v1 問題

    在 kubernetes v1.18.20 根據(jù) traefik 官方文檔部署 時,當(dāng)執(zhí)行 kubectl apply -f 04-whoami-ingrsss.yaml 時 上執(zhí)行以下 yaml 文件創(chuàng)建 ingress 資源的時候出現(xiàn)了這種報錯 error: unable to recognize \\\"04-whoami-ingress.yaml\\\": no matches for kind \\\"Ingress\\\" in version \\\"networking.k8s.io/v1\\\" 查看 kubernetes 官方文檔:https://kuber

    2023年04月08日
    瀏覽(22)
  • 基于grpc-java開發(fā)的普通工程在k8s內(nèi)部署多實例,如何實現(xiàn)客戶端流量的負載均衡

    基于grpc-java開發(fā)的普通工程在k8s內(nèi)部署多實例,如何實現(xiàn)客戶端流量的負載均衡

    本文主要討論通過grpc-java開發(fā)的普通的java grpc工程,以多實例的方式部署在容器編排平臺kubernetes(以下簡稱k8s)上,如何能夠?qū)崿F(xiàn)讓同樣部署在k8s 集群內(nèi)的客戶端請求流量均衡的分發(fā)到多個grpc應(yīng)用部署實例上去。 grpc服務(wù)端程序在k8s內(nèi)部署的多個實例通過headless service暴露服

    2024年01月17日
    瀏覽(18)
  • K8s操作命令

    K8s操作命令

    1. 創(chuàng)建資源 kubectl run 創(chuàng)建并運行一個或多個容器鏡像。 * 創(chuàng)建一個deployment或job來管理容器* 。 語法 :kubectl run NAME --image=image [–env=“key=value”] [–port=port] [–replicas=replicas] [–dry-run=bool] [–overrides=inline-json] [–command] – [COMMAND] [args…] kubectl create kubectl apply 2. 標(biāo)簽操作 查詢

    2024年02月08日
    瀏覽(10)
  • k8s常用操作命令

    1.查看所有 pod 列表 -o wide 查看詳細信息 -A 查看所有命名空間pods -n 后跟 namespace 2.查看 rc和 service 列表 3.顯示 Node 的詳細信息 4.顯示 pod 的詳細信息, 特別是查看 pod 無法創(chuàng)建的時候的日志 5.根據(jù) yaml 創(chuàng)建資源, apply 可以重復(fù)執(zhí)行,create 不行 6.基于 pod.yaml 定義的名稱刪除 pod 7

    2024年02月13日
    瀏覽(16)
  • 一些k8s集群操作命令

    參考: 【K8S系列】Pod重啟策略及重啟可能原因_k8s查看pod重啟原因-CSDN博客 #查看加入集群命令 kubeadm token create --print-join-command #kubeadm重置k8s kubeadm reset -f ipvsadm --clear systemctl stop kubelet rm -rf /etc/kubernetes/* reboot #刪除節(jié)點 kubectl drain --delete-local-data --force --ignore-daemonsets 節(jié)點name?節(jié)

    2024年02月08日
    瀏覽(16)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包