• 使用Minikube+docker+harbor+k8s自动化部署 @by_TWJ


    1. 开始

    建议使用driver=none方式

    1.1. 环境

    系统:archlinux
    k8s版本:1.30.0

    1.2. 测试的git仓库

    https://gitee.com/alvis128/demo.git
    https://gitee.com/alvis128/demo2.git
    

    1.3. 离线文件

    链接:https://pan.baidu.com/s/1G0mhdUhd0HmphZnlva2prg 
    提取码:ue70
    

    1.4. 安装docker

    # 安装docker
    sudo pacman -S docker
    # 配置自启动服务,并立即启动docker
    sudo systemctl enable --now docker
    # 赋予当前用户docker权限
    sudo usermod -aG docker $USER
    newgrp docker
    

    docker 配置源
    /etc/docker 目录可能不存在,需要创建,所以运行命令:mkdir /etc/docker

    nano /etc/docker/daemon.json
    ----------------------
    {
     "registry-mirrors": [
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://registry.docker-cn.com"
     ]
    }
    ---------------------
    # 更新daemon
    systemctl daemon-reload
    # 重启docker
    systemctl restart docker
    # 查看docker状态
    systemctl status docker
    

    1.5. 安装docker-compose(非必要)

    # 安装docker-compose
    sudo pacman -S docker-compose
    

    1.6. 安装Jenkins

    默认启动端口是:8090

    sudo pacman -S jenkins
    # 查看启动状态
    systemctl status jenkins 
    # 若没有启动,则运行命令启动
    systemctl start jenkins
    
    # 赋予当前用户(jenkins)docker权限
    sudo usermod -aG docker jenkins
    newgrp docker
    

    额外:
    jenkins切换用户执行

    # 修改
    nano /usr/lib/systemd/system/jenkins.service
    -------------
    user=tavion
    -------------
    chown -R tavion:tavion /usr/lib/jenkins
    chown -R tavion:tavion /var/cache/jenkins
    chown -R tavion:tavion /var/log/jenkins
    

    1.7. 安装harbor

    第一步、 下载并解压
    github仓库:https://github.com/goharbor/harbor/releases

    # 下载并解压
    wget https://github.com/goharbor/harbor/releases/download/v2.11.0-rc1/harbor-offline-installer-v2.11.0-rc1.tgz
    tar zxvf harbor-offline-installer-v2.11.0-rc1.tgz
    # 上面解压后,会生成harbor目录,然后我们进入目录
    cd harbor
    
    

    第二步、配置harbor.yml

    # 复制并改名
    cp harbor.yml.tmpl harbor.yml
    # 第二步、修改harbor.yml文件
    nano harbor.yml
    ----------------------
    # 注释https
    # 修改hosthome为本地ip地址,也可以改为域名
    ----------------------
    
    
    

    修改harbor.yml文件,我们测试环境不需要用https,所以注释掉,例如:

    # 修改hostname
    hostname: tavion.com
    
    http:
      port: 8180
    # 下面注释https
    # https related config
    # https:
      # https port for harbor, default is 443
      # port: 8181
      # The path of cert and key files for nginx
      # certificate: /home/vagrant/harbor/secret/ca.crt
      # private_key: /home/vagrant/harbor/secret/ca.key
      # enable strong ssl ciphers (default: false)
      # strong_ssl_ciphers: false
    
    (后面略)
    

    第三步、修改/etc/hosts,追加自定义域名

    echo "127.0.0.1 tavion.com" >> /etc/hosts
    

    第四步、导入harbor的images包
    如果不导入,harbor会联网下载包,很慢的

    docker load -i harbor.v2.11.0.tar.gz
    

    第五步、安装harbor

    ./install.sh
    

    1.8. 允许docker通过http访问私有仓库

    第一种:通过修改daemon.json 方式(不推荐,因为重启后,会被其他程序修改)

    
    # 修改/etc/docker/daemon.json ,修改结果如下:
    vi /etc/docker/daemon.json
    -----------------------------------------------
    
    {
      "exec-opts": [
        "native.cgroupdriver=systemd"
      ],
      "log-driver": "json-file",
      "log-opts": {
        "max-size": "100m"
      },
      "storage-driver": "overlay2",
      "registry-mirrors": [
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://registry.docker-cn.com"
      ],
      "insecure-registries": [
        "http://tavion.com:8380"
      ]
    }
    -----------------------------------------------
    # 刷新daemon
    systemctl daemon-reload
    systemctl restart docker
    # 查看docker是否正常运行,没问题
    systemctl status docker
    
    
    

    第二种: 通过在docker.service启动时添加例外

    # 通过查看状态,找到docker服务执行类
    systemctl status docker
    # 修改服务
    sudo nano /usr/lib/systemd/system/docker.service
    ------------------------------------------
    # 修改成如下,在末尾添加例外 --insecure-registry=tavion.com
    ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry=tavion.com
    ------------------------------------------
    
    
    

    1.9. 修改/etc/hosts,追加自定义域名

    前面如果运行了,这里就不用运行了

    echo "127.0.0.1 tavion.com" >> /etc/hosts
    

    1.10. 安装Minikube

    打开网址:https://minikube.sigs.k8s.io/docs/start/
    根据提示安装Minikube

    例如linux系统安装步骤:

    # 下载并安装minikube程序
    curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
    sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64
    
    # 使用minikube部署k8s,安装很慢,因为网络问题,如下就是成功例子
    minikube start  --kubernetes-version=v1.30.0  --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --driver=docker --memory=2048mb  --image-mirror-country='cn'
    ---------------------------------------------
    * minikube v1.33.1 on Arch  (vbox/amd64)
    * Using the docker driver based on user configuration
    * Using image repository registry.cn-hangzhou.aliyuncs.com/google_containers
    * Using Docker driver with root privileges
    * Starting "minikube" primary control-plane node in "minikube" cluster
    * Pulling base image v0.0.44 ...
    ! minikube was unable to download registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.44, but successfully downloaded docker.io/kicbase/stable:v0.0.44 as a fallback image
    * Creating docker container (CPUs=2, Memory=2048MB) ...
    * Preparing Kubernetes v1.30.0 on Docker 26.1.1 ...
      - Generating certificates and keys ...
      - Booting up control plane ...
      - Configuring RBAC rules ...
    * Configuring bridge CNI (Container Networking Interface) ...
    * Verifying Kubernetes components...
      - Using image registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v5
    * Enabled addons: storage-provisioner, default-storageclass
    * kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'
    * Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
    ---------------------------------------------
    # 添加别名
    alias kubectl="minikube kubectl --"
    # 查看安装状态,如果安装成功,是全部都ready的,如下就是成功例子
    kubectl get po -A
    ---------------------------------------------
    NAMESPACE              NAME                                        READY   STATUS    RESTARTS       AGE
    kube-system            coredns-7c445c467-5g2sl                     1/1     Running   1 (103s ago)   10m
    kube-system            etcd-minikube                               1/1     Running   1 (108s ago)   11m
    kube-system            kube-apiserver-minikube                     1/1     Running   1 (98s ago)    11m
    kube-system            kube-controller-manager-minikube            1/1     Running   1 (108s ago)   11m
    kube-system            kube-proxy-vnc94                            1/1     Running   1 (108s ago)   10m
    kube-system            kube-scheduler-minikube                     1/1     Running   1 (108s ago)   11m
    kube-system            storage-provisioner                         1/1     Running   2 (108s ago)   11m
    kubernetes-dashboard   dashboard-metrics-scraper-b5fc48f67-28bf9   1/1     Running   1 (108s ago)   9m23s
    kubernetes-dashboard   kubernetes-dashboard-779776cb65-2nqw4       1/1     Running   2 (94s ago)    9m23s
    ----------------------------------------------
    
    
    
    

    2. minikube使用driver=docker方式

    minikube 创建一个minikube的docker(1)容器,里面也有一个docker(2),服务都在这个docker(2)里执行

    有缺陷:如果要添加私有仓库,需要进入到docker(2)里修改,且重启minikube后,docker(2)的修改内容丢失,这里的修改内容指的是私有仓库。不推荐使用

    这里略,不推荐使用

    3. minikube使用driver=none方式

    部署简单

    minikube start  --kubernetes-version=v1.30.0  --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --driver=none --memory=2048mb  --image-mirror-country='cn'
    

    3.1. 安装minikube前提

    3.1.1. cri-docker安装

    参考 https://mirantis.github.io/cri-dockerd/usage/install-manually/

    1. 下载二进制安装包
      打开网址,下载: https://github.com/Mirantis/cri-dockerd

    下载后文件:cri-dockerd-0.3.14.amd64.tgz
    解压: tar zxvf cri-dockerd-0.3.14.amd64.tgz

    1. 本地执行
    git clone -b v0.3.14 --depth 1 https://github.com/Mirantis/cri-dockerd.git
    
    1. 进入cri-dockerd目录,并把二进制安装包cri-dockerd 放到cri-dockerd目录下

    2. 执行

    install -o root -g root -m 0755 cri-dockerd /usr/local/bin/cri-dockerd
    install packaging/systemd/* /etc/systemd/system
    sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service
    systemctl daemon-reload
    systemctl enable --now cri-docker.socket
    

    3.1.2. containernetworking-plugins 安装

    参考 https://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver
    查看版本:
    https://github.com/containernetworking/plugins/releases

    v1.5.0 为例

    
    
    mkdir -p /opt/cni/bin
    tar -xf cni-plugins-linux-amd64-v1.5.0.tgz -C /opt/cni/bin
    
    

    3.1.3. 安装 conntrack-tools

    pacman -S conntrack-tools
    

    3.1.4. 安装crictl

    sudo pacman -S crictl
    

    3.1.5. 安装which

    sudo pacman -S which
    

    3.1.6. 安装socat

     pacman -S socat
    

    3.1.7. 禁用swap

    # 临时禁用
    sudo swapoff -a
    # 永久关闭
    sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab
    

    3.2. 安装成功后

    3.2.1. 安装时的问题

    minikube start  --kubernetes-version=v1.30.0  --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --driver=none --memory=2048mb  --image-mirror-country='cn'
    

    这里一般都会有网络问题,如果失败,则重新安装。

    # 删除后,重新安装
    minikube delete 
    

    你也可以从我网盘里拿到minikube start…的离线安装文件: minikube_cache.tar.gz

    你可以放置到~/.minikube 如下,然后继续minikube start…

    mv minikube_cache.tar.gz ~/.minikube
    tar zxvf minikube_cache.tar.gz
    
    minikube start  --kubernetes-version=v1.30.0  --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --driver=none --memory=2048mb  --image-mirror-country='cn'
    

    3.2.2. 设置别名 kubectl

    # 修改/etc/profile 在最后添加如下
    alias kubectl="minikube kubectl --"
    
    # 更新
    source /etc/profile
    

    3.2.3. 安装minikube-dashboard

    minikube dashboard
    
    # 配置代理
    kubectl proxy --port=45396 --address='0.0.0.0' --disable-filter=true --accept-hosts='^.*' &
    # 游览器访问:
    http://tavion.com:45396/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/ingressclass?namespace=default
    

    3.2.4. 给apiservice配置代理外网访问(含minikube-dashboard)

    # 配置代理:这里我们配置后台执行,所以后面添加&: 
    kubectl proxy --port=45396 --address='0.0.0.0' --disable-filter=true --accept-hosts='^.*' &
    

    4. 外部端口之间通讯

    4.1. 使用 port-forward(临时用)

    # 配置映射外部端口
        # 查看Pods
        kubectl get pod
        --------------------------------
        NAME                    READY   STATUS    RESTARTS   AGE
        demo-79dfdd6f88-8c69f   1/1     Running   0          65m
        --------------------------------
        # 映射外部端口
        kubectl port-forward --address 0.0.0.0 demo-79dfdd6f88-8c69f 8190:8080
        # 游览器访问:
        curl http://localhost:8190/version
    

    4.2. 使用Pod提供的外部访问端口

    配置自定义的外部访问端口,需要在ports里添加hostPort外部访问端口

    apiVersion: v1
    kind: Pod
    metadata:
      name: webapp 
      labels:
        app: webapp 
    spec:
      # hostNetwork: true  		# 网络模式选择为使用宿主机网络,即容器所有的端口都会自动映射到宿主机上
      containers:
      - name: webapp
        image: tomat
        ports:
        - containerPort: 8080	# 容器的运行端口为 8080
          hostPort: 8081 		# 映射到宿主机的端口为 8081,如果上边设置了网络模式,则不需要加 hostPort
        # command: ['sh', '-c', 'echo The app is running! && sleep 3600']
    
    minikube kubectl -- apply -f webapp-pod.yaml
    

    4.3. 使用 ingress提供的外部访问端口转发

    这种只提供80端口和443端口,内置nginx,通过nginx转发请求。如下:

    4.3.1. 安装ingress

    minikube addons enable ingress --images="KubeWebhookCertgenCreate=google_containers/kube-webhook-certgen:v20230407,KubeWebhookCertgenPatch=google_containers/kube-webhook-certgen:v20230407,IngressController=google_containers/nginx-ingress-controller:v1.8.1" --registries="IngressController=registry.cn-hangzhou.aliyuncs.com,KubeWebhookCertgenCreate=registry.cn-hangzhou.aliyuncs.com,KubeWebhookCertgenPatch=registry.cn-hangzhou.aliyuncs.com"
    

    安装成功后,查看状态:

    
    kubectl get pod -n ingress-nginx
    ----------------------------------
    NAME                                        READY   STATUS      RESTARTS   AGE
    ingress-nginx-admission-create-29nfv        0/1     Completed   0          146m
    ingress-nginx-admission-patch-5dmvr         0/1     Completed   1          146m
    ingress-nginx-controller-77b5c5fcc6-wpgzf   1/1     Running     0          146m
    
    ----------------------------------
    

    4.3.2. 例子1:

    kubectl get svc -n ingress-nginx -owide
    

    demo-ingress.yaml

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: demo-ingress
      annotations:
        # 指定 Ingress Controller 的类型
        kubernetes.io/ingress.class: "nginx"
        # 指定我们的 rules 的 path 可以使用正则表达式
        nginx.ingress.kubernetes.io/use-regex: "true"
        # 连接超时时间,默认为 5s
        nginx.ingress.kubernetes.io/proxy-connect-timeout: "600"
        # 后端服务器回转数据超时时间,默认为 60s
        nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
        # 后端服务器响应超时时间,默认为 60s
        nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
        # 客户端上传文件,最大大小,默认为 20m
        nginx.ingress.kubernetes.io/proxy-body-size: "10240m"
        # URL 重写
        nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
      rules:
        - host: demo.tavion.com # 游览器通过域名访问,不能使用ip访问,ip访问会报404 找不到资源:http://demo.tavion.com
          http:
            paths:
              - pathType: Prefix
                path: /    # 匹配路径
                backend:
                  service:
                    name: demo    # deployment的名称
                    port:
                      number: 8080    # deployment的端口
    
    
    # 加入转发配置信息到ingress
    minikube kubectl -- apply -f demo-ingress.yaml
    

    4.3.3. 例子2:

    在外网可以通过www1.westos.org访问myservice服务,也可以通过www2.westos.org访问nginx-svc服务

    apiVersion: networking.k8s.io/v1betal
    kind: Ingress
    metadata:
        name: ingress-demo
    spec:
        rules:
        - host:www1.westos.org
          http:
            paths:
            - path: /
              backend:
                serviceName: myservice
                servicePort: 80
        - host: www2.westos.org
          http:
            paths:
            - path: /
              backend:
                serviceName: nginx-svc
                servicePort: 80
        
    

    5. 内部端口之间通讯

    k8s集群中三种IP(NodeIP、PodIP、ClusterIP)介绍

    • NodeIP:Node 节点的 IP 地址,即物理机(虚拟机)的 IP 地址。
    • PodIP:Pod 的 IP 地址,即 docker 容器的 IP 地址,此为虚拟 IP 地址。
    • ClusterIP:k8s 虚拟的 Service 的 IP 地址,此为虚拟 IP 地址。

    5.1. Pod 不会与Pod之间通讯

    5.2. service之间通讯

    service之间是可以通讯的。
    Service种类、类型(ClusterIP、NodePort、LoadBalancer、ExternalName)

    配置方法:
    配置自定义的外部访问端口,需要在ports里添加nodePort外部访问端口

    apiVersion: v1
    kind: Service 
    metadata: 
      name: webapp 
    spec: 
      type: NodePort		# 设置 Service 类型为 NodePort
      ports: 
      - port: 8080 			# 设置 Service 暴露的端口为 8080, 即8080(svc) <-> 80(pod)
        targetPort: 8080		# 设置 Pod 的端口为 8080
        nodePort: 30081 	# 设置 NodePort 的端口为 30081,即30081(NodePort) <-> 8080(svc) <-> 80(Pod) 
      selector:
        app: webapp 
    
    minikube kubectl -- apply -f webapp-svc.yaml
    
    [tavion@tavion-m410 ~]$ kubectl get svc
    NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    webapp       NodePort    10.100.227.225   <none>        8080:31155/TCP   12h
    kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP          13h
    [tavion@tavion-m410 ~]$ ^C
    [tavion@tavion-m410 ~]$ curl http://localhost:31155/version
    test-v3.1
    
    

    5.2.1. 例子

    服务demo 和 服务demo2

    语法:
        http://[服务名].[namespace]:[端口]/
    

    服务状态

    [tavion@tavion-m410 k8s]$ kubectl get svc
    NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    demo         NodePort    10.100.227.225           8080:31155/TCP   18h
    demo2        NodePort    10.105.19.92             8080:30910/TCP   15m
    kubernetes   ClusterIP   10.96.0.1                443/TCP          18h
    
    

    服务demo2 可以通过 http://demo.default:8080/ 访问demo

    6. 挂载卷

    K8S的存储系统从基础到高级又大致分为三个层次:普通Volume,Persistent Volume 和动态存储供应。

    这里的挂载卷,是普通Volume

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: demo
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: demo
      template:
        metadata:
          labels:
            app: demo
        spec:
          containers:
            - name: demo
              image: tavion.com:8380/repos/demo:${version}
              ports:
                - containerPort: 8080
    #          volumeMounts: # 映射到docker容器的卷目录或文件
    #            - name: nginx-volume-dir  # 映射的卷别名
    #              mountPath: /var/log/nginx # 映射到容器的目录
    #            - name: nginx-volume-file # 映射的卷别名
    #              mountPath: /var/log/nginx/access2.log # 映射到容器的目录
    #      volumes:  # 挂载系统的卷
    #        - name: nginx-volume-dir  # 挂载的卷的别名
    #          hostPath:
    #            path: /path/on/host   # 挂载的卷路径
    #        - name: nginx-volume-file # 挂载的卷的别名
    #          hostPath:
    #            path: /path/on/host/access2.log # 挂载的卷文件
    

    7. StatefulSet

    参考:https://blog.csdn.net/hguisu/article/details/124228252
    StatefulSet 是用来管理有状态的服务。

    什么叫有状态和无状态的服务?

    • 无状态是指该服务运行的实例不会在本地存储需要持久化的数据。
      举例:其实就是我们的springboot项目,等不需要保存数据到本地,可以随意扩容。
    • 有状态是指和无状态服务相比,它多了状态保存的需求。即有数据存储功能。
      举例:就像我们的一些消息队列、数据库等,需要数据存储功能。

    那么有状态和无状态有什么优点呢?
    实例数量:无状态服务可以有一个或多个实例,因此支持两种服务容量调节模式;有状态服务只能有一个实例,不允许创建多个 实例,因此也不支持服务容量调节模式。
    存储卷:无状态服务可以有存储卷,也可以没有,即使有也无法备份存储卷里面的数据;有状态服务必须要有存储卷,并且在创建服务时,必须指定给该存储卷分配的磁盘空间大小。
    数据存储:无状态服务运行过程中的所有数据(除日志和监控数据)都存在容器实例里的文件系统中,如果实例停止或者删除,则这些数据都将丢失,无法找回;而对于有状态服务,凡是已经挂载了存储卷的目录下的文件内容都可以随时进行备份,备份的数据可以下载,也可以用于恢复新的服务。但对于没有挂载卷的目录下的数据,仍然是无法备份和保存的,如果实例停止或者删除,这些非挂载卷里的文件内容同样会丢失。

    那么创建StatefulSet需要怎么做?
    在Deployment中,与之对应的服务是service,而在StatefulSet中与之对应的headless service。

    所以,同样,我们也需要创建headless service

    headless service,即无头服务,与service的区别就是它没有Cluster IP,解析它的名称时将返回该Headless Service对应的全部Pod的Endpoint列表。
    除此之外,StatefulSet在Headless Service的基础上又为StatefulSet控制的每个Pod副本创建了一个DNS域名,这个域名的格式为:
    $(podname).(headless server name)
    FQDN:$(podname).(headless server name).namespace.svc.cluster.local
    

    例子1、
    第一步创建Headless Service

    cat sts-web-svc.yaml 
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: sts-web-svc
    spec:
      selector:
        app: web-nginx
      ports:
      - port: 80
        targetPort: 80
      clusterIP: None     # 设置无IP地址,这是headless service重点
    

    第二步、创建StatefulSet

    cat sts-web.yaml 
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: sts-web
      namespace: default
    spec:
      serviceName: sts-web-svc  # 关联SVC资源
      replicas: 2               # 副本数
      selector:
        matchLabels:            # 关联具有app=web-nginx标签的Pod
          app: web-nginx
      volumeClaimTemplates:        # 卷申请模板 
      - metadata:
          name: www                # 卷申请模板名称
        spec:
          accessModes: ["ReadWriteOnce"] # 访问模式
          storageClassName: nfs          # 指定供应商,前提是需要存在此供应商
          resources:
            requests:
              storage: 1Gi               # 存储大小1G
      template:
        metadata:
          labels:
            app: web-nginx
        spec:
          containers:
          - name: web-nginx
            image: nginx:1.18.0
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 80
              name: web
            volumeMounts:
            - name: www             # 指定卷申请模板名称
              mountPath: /usr/share/nginx/html
            startupProbe:           # 启动探测
              tcpSocket:
                port: 80
    

    8. 补充语句

    访问pod容器,例如:

    kubectl exec it mynginx -c tomcat -- sh
    kubectl exec it mynginx sh
    

    更新镜像

    kubectl set image deployment my-tomcat tomcat=tomcat:10.1.11 --record
    

    回退镜像

    kubectl rollout history deploy my-tomcat
    

    9. 部署项目

    9.1. 部署springboot项目

    https://gitee.com/alvis128/demo.git
    https://gitee.com/alvis128/demo2.git
    

    9.1.1. 流程

    安装插件:verion number
    在这里插入图片描述

    重启jenkins
    新建Item
    在这里插入图片描述
    配置拉取仓库
    在这里插入图片描述
    构造环境,添加版本信息
    在这里插入图片描述
    添加Build Steps操作
    在这里插入图片描述
    Build Steps 步骤选项:
    在这里插入图片描述
    Build Steps -1 ,编译,因为我是用gradle编译的,你们可能是maven
    在这里插入图片描述
    Build Steps -2 ,发布到harbor仓库中
    在这里插入图片描述

    Build Steps -3 ,使用k8s 部署springboot项目
    在这里插入图片描述
    保存后,然后运行BuildNow
    在控制台查看日志
    在这里插入图片描述

    9. 术语

    k8s 里面的一些术语:

    • deployment 部署项目,用来管理pod节点,可以控制pod节点启动、关闭、添加pod等等(部署)
    • pod 是服务的最小单位,每个pod里面都有一个docker。(服务)
    • service 是管理pod服务之间的通讯关系的,(网络方面)
    • ingress 是管理service服务之间的通讯关系(网络方面)

    kubernetes里有三张不同的网络,每种IP地址,就代表一个不同的寻址空间:

    • Node IP:Node节点的IP地址
    • Pod IP:Pod的IP地址
    • Cluster IP:内部或集群内访问Service的IP地址
    • External IP是 为了解决如何从外部访问 service 服务的问题。

    简写

    • service - svc
    • podes - po
      例如 : kubectl get svc 等同于 kubectl get service
  • 相关阅读:
    《代码大全2》第4章 关键的“构建“决策
    初学Bootstrap
    RIPEMD算法:多功能哈希算法的瑰宝
    体验版小程序访问不到后端接口请求失败问题解决方案
    用java写一个kafka的生产者,往topic里面添加数据
    【Flutter】自动生成图片资源索引插件二:FlutterAssetsGenerator
    接口 索引签名 接口与类型别名的异同 接口的继承 函数接口
    【ETL】常见的ETL工具(含开源及付费)一览和优劣势分析?
    【MySQL基础 安装】CentOS 7 Yum网络部署 最新官方MySQL5 2020_2_1
    网络模型—BIO、NIO、IO多路复用、信号驱动IO、异步IO
  • 原文地址:https://blog.csdn.net/u010101252/article/details/139334202