GVKun编程网logo

k8s Pipline CI/CD

15

本文将为您提供关于k8sPiplineCI/CD的详细介绍,同时,我们还将为您提供关于.NetCore2.1秒杀项目一步步实现CI/CD(Centos7.2)系列二:k8s高可用集群搭建总结以及部署A

本文将为您提供关于k8s Pipline CI/CD的详细介绍,同时,我们还将为您提供关于.Net Core2.1 秒杀项目一步步实现CI/CD(Centos7.2)系列二:k8s高可用集群搭建总结以及部署API到k8s、33套云原生实战训练营K8s,挑战年薪50万K8s+Docker+DevOps+Jenkins+CICD+Git+Istio+Service Mesh、39 套云原生实战训练营 K8s,挑战年薪 50 万(K8s+Docker+DevOps+Jenkins+CICD+Git+Istio+Service Mesh)、48 套 K8s 云原生实战,微服务,容器自动化视频教程 K8s+Docker+DevOps+Jenkins+CICD的实用信息。

本文目录一览:

k8s Pipline CI/CD

k8s Pipline CI/CD

一、Pipeline 介绍

pipeline 是一套 jenkins 官方提供的插件,它可以用来在 jenkins 中实现和集成连续交付

用户可以利用 Pipeline 的许多功能:

代码:pipeline 在代码中实现,通常检查到源代码控制,使团队能够编辑,审查和迭代其交付管道。

持久:pipeline 可以在 Jenkins master 的计划内和计划外重启中存活。

Pausable:在继续 pipeline 运行之前,pipeline 可以选择停止并等待人工输入或批准。

多功能:pipeline 支持复杂的实际 CD 要求,包括并行分叉 / 连接,循环和执行工作的能力。

可扩展:Pipeline 插件支持其 DSL 的自定义扩展 和多个与其他插件集成的选项

二、k8s 实现集成 / 部署 / 交付

 

 三、创建一个 gitlab 的测试项目(网上找的简单代码测试)

1、测试代码

代码结构

[root@node2 test1]# tree 
.
├── pom.xml
└── src
    └── main
        └── java
            └── hello
                ├── Greeter.java
                └── HelloWorld.java

 

package hello;

public class HelloWorld {
    public static void main(String[] args) {
        Greeter greeter = new Greeter();
        System.out.println(greeter.sayHello());
    }
}
HelloWorld.java
package hello;

public class Greeter {
    public String sayHello() {
        return "Hello world!";
    }
}
Greeter.java
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.springframework</groupId>
    <artifactId>gs-maven</artifactId>
    <packaging>jar</packaging>
    <version>0.1.0</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>hello.HelloWorld</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
pom.xml

2、git 的测试项目

 

四、jenkins 配置

1、插件安装

安装好 git、GitLab Plugin、Gitlab Hook Plugin、Gitlab API Plugin、Pipeline、Kubernetes plugin 插件。

2、在 jenkins 中配置 kubernetes

 

 3、简单测试(创建一个 Pipline 项目)

测试的 Pipline 脚本

 

def label = "mypod-${UUID.randomUUID().toString()}"
podTemplate(label: ''label'', cloud: ''kubernetes'') {
    node(''label'') {
        stage(''Run shell'') {
            sh ''echo hello world''
        }
    }
}

 

 

 

 

 

 

 

 

 4、pipline 中配置 gi 凭证

创建凭证,username gitlab 的账号,password gitlab 账号对应的密码。

 

5、Pipline 中视图 git 凭证

 

 


6、重新构建 jnlp-slave 镜像(添加 maven)

 

mkdir myjenkins
cd myjenkins/
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
tar xf apache-maven-3.5.4-bin.tar.gz

[root@node2 myjenkins]# cat Dockerfile 
FROM jenkins/jnlp-slave:3.27-1
LABEL maintainer="maven@qq.com"
ENV MAVEN_HOME /usr/local/maven
ENV PATH=$PATH:$MAVEN_HOME/bin

COPY apache-maven-3.5.4  /usr/local/maven
[root@node2 myjenkins]# docker build  -t myjnlp-slave:1.0 ./

 

7、配置好镜像仓库(我使用的 aliyun)

 

 

 8、把 dokcer 组的 gid 改成 10000(容器中 jenkins 账号的 ugid)

groupmod  -g10000  docker
chown root.docker   /var/run/docker.sock

 

9、配置 gitlab 和 jenkins 的交互(我使用的 webhook 方式,并设置提交 tag 就触发构建)

10、重新更改 Pipline 脚本,使执行 jenkins 构建后能直接创建镜像并提交到镜像仓库

Pipline 脚本

def label = "mypod-${UUID.randomUUID().toString()}"
def registry = "registry-vpc.cn-hongkong.aliyuncs.com"
def app_name = "javatest"
def namespace = "aliyun-zhang"
def username = "xxxxxxxxxxxxxxxxxx"
def regpass = "xxxxxxxxxxxxxxxxxxx"


podTemplate(label: ''label'', cloud: ''kubernetes'', containers: [
    containerTemplate(
        name: ''jnlp'', 
        image: ''myjnlp-slave:1.0''
    ),
],
  volumes: [
    hostPathVolume(mountPath: ''/var/run/docker.sock'', hostPath: ''/var/run/docker.sock''),
    hostPathVolume(mountPath: ''/usr/bin/docker'', hostPath: ''/usr/bin/docker'')
],)
{
    node(''label'') {
        stage(''Task'') {
            stage(''拉取代码'') {
                git credentialsId: ''gitlab-auth'', url: ''http://mygitlab-gitlab-ce.default.svc.cluster.local/root/test1.git''
                def mytag = sh returnStdout: true, script: ''git describe --always --tag''
                sh "git checkout -b $mytag"
                echo "mytag $mytag ${mytag} ----"
                
            }
            stage(''编译打包'') {
                echo "mvn clean package -Dmaven.test.skip=true"
            }
            
            stage(''构建上传镜像'') {
                def mytag = sh returnStdout: true, script: ''git describe --always --tag''
                def image_name = "${app_name}:${mytag}".minus("\n")
                
                echo "image_name $image_name"
                sh label: '''', script: ''''''              echo \''
                    FROM tomcat:latest 
                    ADD pom.xml /usr/local/tomcat/webapps/ 
                    \'' > Dockerfile
                '''''' 
                    
                sh """
                    docker build  -t "${registry}/${namespace}/${image_name}" ./
                    docker login -u ${username} -p \"${regpass}\" ${registry}
                    docker push ${registry}/${namespace}/${image_name}
                    
                """
                
            }            
        }
    }
}

11、jenkins 构建测试与查看

 

 

 

 

 

 五、自动部署到 k8s 集群

 1、jenkins 下载 kubernetes continuous deploy 插件(官方文档:https://plugins.jenkins.io/kubernetes-cd)

 

 2、配置 kubeconfig 凭证

添加 kubeconfig 文件,我选择的是直接粘贴文件内容(master 端的.kube/config 文件)

3、记录凭证 ID 值

 

4、创建一个 deploy.yaml 文件,并把文件上传到项目的 git 中

[root@k8s-m ~]# cat java-deploy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mydeploy
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      test_node: k8s-node
  template:
    metadata:
      labels:
        test_node: k8s-node
    spec:
      containers:
      - name: myjava-server
        image: tomcat:latest
        ports:
        - name: http
          containerPort: 8080

 

 

 5、更改 Pipline 脚本内容

def label = "mypod-${UUID.randomUUID().toString()}"
def registry = "registry-vpc.cn-hongkong.aliyuncs.com"
def app_name = "javatest"
def namespace = "aliyun-zhang"
def username = "xxxxxxxxxxxx"
def regpass = "xxxxxxxxx"
def k8s_auth = "5ce0993e-e2e9-4126-a910-2acd0a77fefb"


podTemplate(label: ''label'', cloud: ''kubernetes'', containers: [
    containerTemplate(
        name: ''jnlp'', 
        image: ''myjnlp-slave:1.0''
    ),
],
  volumes: [
    hostPathVolume(mountPath: ''/var/run/docker.sock'', hostPath: ''/var/run/docker.sock''),
    hostPathVolume(mountPath: ''/usr/bin/docker'', hostPath: ''/usr/bin/docker'')
],)
{
    node(''label'') {
        stage(''Task'') {
            stage(''拉取代码'') {
                git credentialsId: ''gitlab-auth'', url: ''http://mygitlab-gitlab-ce.default.svc.cluster.local/root/test1.git''
                def mytag = sh returnStdout: true, script: ''git describe --always --tag''
                sh "git checkout -b $mytag"
                echo "mytag $mytag ${mytag} ----"
            }
            stage(''编译打包'') {
                sh "mvn clean package -Dmaven.test.skip=true"
            }
            
            stage(''构建上传镜像'') {
                def mytag = sh returnStdout: true, script: ''git describe --always --tag''
                def image_name = "${app_name}:${mytag}".minus("\n")
                
                echo "image_name $image_name"
                sh label: '''', script: ''''''              echo \''
                    FROM tomcat:latest 
                    ADD target/*.jar /usr/local/tomcat/webapps/ 
                    \'' > Dockerfile
                '''''' 
                    
                sh """
                    docker build  -t "${registry}/${namespace}/${image_name}" ./
                    docker login -u ${username} -p \"${regpass}\" ${registry}
                    docker push ${registry}/${namespace}/${image_name}
                    
                """
            }
             stage(''部署到K8S''){
                def mytag = sh returnStdout: true, script: ''git describe --always --tag''
                def image_name = "${app_name}:${mytag}".minus("\n")
                sh """
                sed -i ''s#tomcat:latest#${registry}/${namespace}/${image_name}#'' java-deploy.yaml
                """
                kubernetesDeploy configs: ''java-deploy.yaml'', kubeconfigId: "${k8s_auth}"
      }
        }
    }
}

6、构建测试

我配置了 jenkins 和 gitlab 的 webhook 配置,提交 tag 后会自动构建到部署到 k8s 集群

测试

[root@node2 test1]# echo 123 >> README.md 
[root@node2 test1]# git commit -a -m ''123''
[master bda4c6f] 123
 1 file changed, 1 insertion(+), 1 deletion(-)
[root@node2 test1]# git tag  10.0 
[root@node2 test1]# git push origin master 10.0
Username for ''http://10.101.58.237'': root
Password for ''http://root@10.101.58.237'': 
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 347 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To http://10.101.58.237/root/test1.git
   da0fbc3..bda4c6f  master -> master
 * [new tag]         10.0 -> 10.0

 

jenkins 构建过程

k8s 集群查看

[root@k8s-m ~]# kubectl get deploy  mydeploy
NAME       READY   UP-TO-DATE   AVAILABLE   AGE
mydeploy   2/2     2            2           64s
[root@k8s-m ~]# kubectl get pod  
NAME                                   READY   STATUS    RESTARTS   AGE
mydeploy-746bb8db64-4fpvz              1/1     Running   0          69s
mydeploy-746bb8db64-pp7tw              1/1     Running   0          69s

[root@k8s-m ~]# kubectl get pod mydeploy-746bb8db64-4fpvz  -o yaml|grep image: 
  - image: registry-vpc.cn-hongkong.aliyuncs.com/aliyun-zhang/javatest:10.0
    image: registry-vpc.cn-hongkong.aliyuncs.com/aliyun-zhang/javatest:10.0

 

六、版本回滚

基于 k8s 镜像的回滚还是比较简单的

回滚上一个版本

kubectl rollout undo deployment/deploy-name

查看历史版本信息

#查看 deployment 升级历史
[root@k8s-m ~]# kubectl rollout history deployment/mydeploy
deployment.extensions/mydeploy 
REVISION  CHANGE-CAUSE
3         <none>
4         <none>

#看历史版本更加详细的升级信息
[root@k8s-m ~]# kubectl rollout history deployment/mydeploy  --revision=3
deployment.extensions/mydeploy with revision #3
Pod Template:
  Labels:    pod-template-hash=746bb8db64
    test_node=k8s-node
  Containers:
   myjava-server:
    Image:    registry-vpc.cn-hongkong.aliyuncs.com/aliyun-zhang/javatest:10.0
    Port:    8080/TCP
    Host Port:    0/TCP
    Environment:    <none>
    Mounts:    <none>
  Volumes:    <none>

回滚指定版本

kubectl rollout undo deployment/mydeploy --to-revision=3

 

回滚指定版本 2

直接修改 delpoy 中的镜像

 

七、Deployment 升级策略

1、介绍

deployment 有 2 种策略,分别是 Recreate 和 RollingUpdate,RollingUpdate 是默认的策略
RollingUpdate 也有相对应的升级策略,如果策略设置的不合理,那么升级的过程就有可能导致服务中断
Max Unavailable
最多有几个 pod 处于无法工作的状态,默认值是 25%
Max Surge
升级过程中可以比预设的 pod 的数量多出的个数,默认值是 25%
minReadySeconds
等待容器启动的时间,默认值是 0,单位是:秒,容器运行成功之后直接执行下一步
根据应用启动时间,设定相应的 minReadySeconds,保证应用不中断

2、查看 deploy 的更新策略

[root@k8s-m recreate]# kubectl  explain deploy.spec.strategy.type
KIND:     Deployment
VERSION:  extensions/v1beta1

FIELD:    type <string>

DESCRIPTION:
     Type of deployment. Can be "Recreate" or "RollingUpdate". Default is
     RollingUpdate.

 

3、recreate 策略测试

结论:recreate 方式会先停止所有就版本,停止完后才部署新版本

[root@k8s-m ~]# kubectl  get pod -w 
NAME                     READY   STATUS    RESTARTS   AGE
my-app-bb9cc7597-dn5bv   1/1     Running   0          3m36s
my-app-bb9cc7597-gqfx4   1/1     Running   0          3m36s
my-app-bb9cc7597-p4dfb   1/1     Running   0          3m36s
my-app-bb9cc7597-p4dfb   1/1     Terminating   0          3m44s
my-app-bb9cc7597-dn5bv   1/1     Terminating   0          3m44s
my-app-bb9cc7597-gqfx4   1/1     Terminating   0          3m44s
my-app-bb9cc7597-p4dfb   0/1     Terminating   0          3m45s
my-app-bb9cc7597-gqfx4   0/1     Terminating   0          3m45s
my-app-bb9cc7597-dn5bv   0/1     Terminating   0          3m45s
my-app-bb9cc7597-p4dfb   0/1     Terminating   0          3m57s
my-app-bb9cc7597-p4dfb   0/1     Terminating   0          3m57s
my-app-db47b56bf-kwd2c   0/1     Pending       0          0s
my-app-db47b56bf-kwd2c   0/1     Pending       0          0s
my-app-db47b56bf-xkqdz   0/1     Pending       0          0s
my-app-db47b56bf-5v4r5   0/1     Pending       0          0s
my-app-db47b56bf-xkqdz   0/1     Pending       0          0s
my-app-db47b56bf-kwd2c   0/1     ContainerCreating   0          0s

 

4、RollingUpdate 策略测试

结论: 一个接一个地以滚动更新方式发布新版本,滚动的方式可以定义,即先删除多少 pod 在添加多少 pod,或者是闲添加在删除。

[root@k8s-m ~]# kubectl get pod  -w
NAME                     READY   STATUS    RESTARTS   AGE
my-app-db47b56bf-2c2c6   1/1     Running   0          19s
my-app-db47b56bf-k7k5z   1/1     Running   0          19s
my-app-db47b56bf-mclj8   1/1     Running   0          19s
my-app-bb9cc7597-hgz6r   0/1     Pending   0          0s
my-app-bb9cc7597-hgz6r   0/1     Pending   0          0s
my-app-bb9cc7597-hgz6r   0/1     ContainerCreating   0          1s
my-app-bb9cc7597-hgz6r   0/1     ContainerCreating   0          1s
my-app-bb9cc7597-hgz6r   0/1     Running             0          5s
my-app-bb9cc7597-hgz6r   1/1     Running             0          6s
my-app-db47b56bf-mclj8   1/1     Terminating         0          29s
my-app-bb9cc7597-84ngs   0/1     Pending             0          0s
my-app-bb9cc7597-84ngs   0/1     Pending             0          0s
my-app-bb9cc7597-84ngs   0/1     ContainerCreating   0          1s
my-app-bb9cc7597-84ngs   0/1     ContainerCreating   0          2s
my-app-db47b56bf-mclj8   0/1     Terminating         0          31s
my-app-db47b56bf-mclj8   0/1     Terminating         0          34s
my-app-db47b56bf-mclj8   0/1     Terminating         0          34s
my-app-bb9cc7597-84ngs   0/1     Running             0          6s
my-app-bb9cc7597-84ngs   1/1     Running             0          7s

 

[root@k8s-m recreate]# kubectl  explain deploy.spec.strategy.rollingUpdate
KIND:     Deployment
VERSION:  extensions/v1beta1

RESOURCE: rollingUpdate <Object>

DESCRIPTION:
     Rolling update config params. Present only if DeploymentStrategyType =
     RollingUpdate.

     Spec to control the desired behavior of rolling update.

FIELDS:
   maxSurge    <string>
     The maximum number of pods that can be scheduled above the desired number
     of pods. Value can be an absolute number (ex: 5) or a percentage of desired
     pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number
     is calculated from percentage by rounding up. By default, a value of 1 is
     used. Example: when this is set to 30%, the new RC can be scaled up
     immediately when the rolling update starts, such that the total number of
     old and new pods do not exceed 130% of desired pods. Once old pods have
     been killed, new RC can be scaled up further, ensuring that total number of
     pods running at any time during the update is at most 130% of desired pods.

   maxUnavailable    <string>
     The maximum number of pods that can be unavailable during the update. Value
     can be an absolute number (ex: 5) or a percentage of desired pods (ex:
     10%). Absolute number is calculated from percentage by rounding down. This
     can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used.
     Example: when this is set to 30%, the old RC can be scaled down to 70% of
     desired pods immediately when the rolling update starts. Once new pods are
     ready, old RC can be scaled down further, followed by scaling up the new
     RC, ensuring that the total number of pods available at all times during
     the update is at least 70% of desired pods.

 

5、其它更新策略(金丝雀等)

https://zhuanlan.zhihu.com/p/55964678

.Net Core2.1 秒杀项目一步步实现CI/CD(Centos7.2)系列二:k8s高可用集群搭建总结以及部署API到k8s

.Net Core2.1 秒杀项目一步步实现CI/CD(Centos7.2)系列二:k8s高可用集群搭建总结以及部署API到k8s

前言:本系列博客又更新了,是博主研究很长时间,亲自动手实践过后的心得,k8s集群是购买了5台阿里云服务器部署的,这个集群差不多搞了一周时间,关于k8s的知识点,我也是刚入门,这方面的知识建议参考博客园大神edisonchou的系列文章《.NET Core on K8S学习实践系列文章索引(Draft版)》,为什么我要写该系列的文章,是因为我之前 工作的几家公司应用都已经容器化了,.net framework 应用也在慢慢迁移到.net core 上,.net core 从1.0就开始使用了,作为开发人员,有些细节上的东西对开发人员是封闭的,我们只知道项目开发完成通过Jenkins构建,构建完成把镜像推送到HarBor,然后在禅道上建个发布任务,贴上镜像的地址,发给运维就好了。我就对这个过程很好奇,业余时间也在研究这方面的东西。好了,暂且聊到这里,下面我就分享一下自己在搭建k8s集群的心得,有说的不对的地方还请纠正。

 

一、k8s高可用集群搭建总结

我们都知道Kubernetes自身,侧重稳定性、可扩展性、安全性;核心策略的变化小;周边生态持续爆发。k8s搭建的方式有三种:(1)社区方案:杂乱、不可靠、升级难(2)kubeadm:优雅、简单、支持高可用、升级方便、不易维护、文档不够细致 (3)二进制部署,建议初学者使用二进制搭建,因为可以快速放弃,哈哈哈,玩笑归玩笑,二进制的方式易于维护、灵活、升级方便。我的k8s集群使用的是二进制搭建的,5台阿里云的配置 如下:

环境参数:k8s 1.14.0  Docker 17.03.1-ce  Harbor 1.6.0  Jenkins v2.150.2,一定 要注意版本问题,

注意:使用云服务器的,跳过keepalived的配置,不要用虚拟ip(云环境一般都不支持自己定义虚拟ip)就直接把虚拟ip设置为第一个master的ip就可以了。

 PS:如果是一定要高可用的话可以购买云商的负载均衡服务(比如阿里云的SLB),把backends设置成你的三个master节点,然后虚拟ip就配置成负载均衡的内网ip即可。

具体的集群搭建细节,我就不列出来了,因为不是重点。

二、部署WebAPI到k8s

  • 准备Deployment YAML

这个YAML文件,引用自Edison Zhou(https://www.cnblogs.com/edisonchou/p/aspnet_core_on_k8s_firststudy_part3.html),在这里我们使用了Edison Zhou的镜像仓库 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: k8s-demo
  namespace: aspnetcore
  labels:
    name: k8s-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      name: k8s-demo
  template:
    metadata:
      labels:
        name: k8s-demo
    spec:
      containers:
      - name: k8s-demo
        image: edisonsaonian/k8s-demo
        ports:
        - containerPort: 80
        imagePullPolicy: Always

---

kind: Service
apiVersion: v1
metadata:
  name: k8s-demo
  namespace: aspnetcore
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 80
  selector:
    name: k8s-demo


这里这个deploy.yaml就会告诉K8S关于你的API的所有信息,以及通过什么样的方式暴露出来让外部访问。

  需要注意的是,这里我们提前为要部署的ASP.NET Core WebAPI项目创建了一个namespace,叫做aspnetcore,因此这里写的namespace : aspnetcore。

  K8S中通过标签来区分不同的服务,因此这里统一name写成了k8s-demo。

  在多实例的配置上,通过replicas : 2这个设置告诉K8S给我启动2个实例起来,当然你可以写更大的一个数量值。

  最后,在spec中告诉K8S我要通过NodePort的方式暴露出来公开访问,因此端口范围从上一篇可以知道,应该是 30000-32767这个范围之内。

 

  • 通过kubectl 部署到k8s

需要先后执行以下命令:

kubectl create namespace aspnetcore // 创建一个命名空间“aspnetcore”
mkdir aspnetcore
cd aspnetcore/
vim deploy.yaml  //将上面的配置写入该文件中
kubectl create -f deploy.yaml

 

[root@m7-a2-15-43 aspnetcore]# kubectl get svc -n aspnetcore
NAME       TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)       AGE
k8s-demo   NodePort   10.254.180.117   <none>        80:8671/TCP   4h55m

 

可以看到在命名空间aspnetcore下,就有一个k8s-demo的服务运行起来了,并通过端口号8671向外提供访问。

  • 验证WebAPI是否可以访问

首先,在浏览器中访问API接口,看看是否能正常访问:http://公网IP:8671/api/values

然后,我们再到Dashboard中,看看k8s-demo的状态:

我们点击命名空间,选择:aspnetcore

当然了,你也可以直接点击:“集群”选项下面的“命名空间”,点击对应的名称,里面可以看到详细的信息。从Dashboard中可以看到更为详细的信息,包括运行的Deployment、容器组(由于我们设置的replicas=2,因此会有2个容器运行起来)、副本集等等,也可以通过Dashboard实时初步地监控我们的API的运行情况。

  • 通过Dashboard伸缩WebAPI

在Dashboard中,我们可以可视化地对我们的Deployment进行容器实例的伸缩,具体操作可以参考:https://www.cnblogs.com/edisonchou/p/aspnet_core_on_k8s_firststudy_part3.html,这里我就不再多说了。

 

 三、总结

本文,简单总结了一下使用阿里云部署高可用k8s集群,可能有同学说怎么不详细写一下部署的过程呢?由于时间仓促,部署的过程文档还在整理中,况且,部署的过程和该系列文章的主题不符,大家可以参考其他文章,关于Dashboard,一般企业内部是不会使用的,都是自研的,只需要了解即可。该篇文章的目的,是 想让大家体验一下所谓的容器编排,以及asp.net core on k8s。笔者也是刚接触,有很多东西需要学习,这只是k8s的一点点,因为还没用到生产 环境,需要观察一段时间,后期,我把部署的过程整理一下,再分享给大家。提前预告一下篇博客的主题:Jenkins+k8s,实现CI/CD,敬请期待。

这是该系类博客要使用的项目:https://github.com/guozheng007/asp.net-core2.1-miaosha-project

参考资料:

Edison Zhou:https://www.cnblogs.com/edisonchou/p/aspnet_core_on_k8s_firststudy_part3.html

刘果国:https://coding.imooc.com/class/335.html(付费课程366.00)

 

 

出处:http://www.cnblogs.com/runningsmallguo/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

原文出处:https://www.cnblogs.com/runningsmallguo/p/11345620.html

33套云原生实战训练营K8s,挑战年薪50万K8s+Docker+DevOps+Jenkins+CICD+Git+Istio+Service Mesh

33套云原生实战训练营K8s,挑战年薪50万K8s+Docker+DevOps+Jenkins+CICD+Git+Istio+Service Mesh

33套云原生实战训练营K8s,挑战年薪50万K8s+Docker+DevOps+Jenkins+CICD+Git+Istio+Service Mesh

33套云原生技术包含:云原生实战训练营K8s,挑战年薪50万(K8s+Docker+DevOps+Jenkins+CICD+Git+Istio+Service Mesh)云计算,微服务,容器架构师,全栈架构师,集群实战,部署落地,服务治理,服务网格,原理剖析,实战应用,云原生架构,CKA认证实战班,平台设计与开发等

33套精品介绍:1、33套精品是掌柜最近整理出的最新教程,都是当下最火的技术,最火的课程,也是全网教程的精品;
2、33套资源包含:全套完整高清视频、完整源码、配套文档;
3、知识也是需要投资的,有投入才会有产出(保证投入产出比是几百上千倍),如果有心的朋友会发现,身边投资知识的大都是技术经理或者项目经理,工资一般相对于不投资的也要高出很多;

下载地址

总目录:33套云原生实战训练营K8s,挑战年薪50万(K8s+Docker+DevOps+Jenkins+CICD+Git+Istio+Service Mesh)云计算,微服务,容器架构师,全栈架构师,集群实战,部署落地,服务治理,服务网格,原理剖析,实战应用,云原生架构,CKA认证实战班,平台设计与开发视频教程


第01套:云原生高薪课,挑战年薪50万,从零到一构建开源的企业级PaaS平台视频教程


第02套:拥抱云原生从无到有搭建企业自己的私有云平台实现云上亿级流Kubernetes+DevOps+Jenkins+Istio


第03套:云原生实战Docker+K8s+Kubeshere+DevOps云原生实战架构师必修课


第04套:云原生微服务架构实战精讲,微服务架构的迁移和落地视频教程


第05套:云原生微信小程序开发实战-云开发已经成为小程序开发的标配


第06套:云原生+边缘计算项目实战-KubeEdge打造边缘管理平台,实战云边端一体化设计,迈向高阶人才


第07套:真架构!真正的云原生架构与云IDC实操业务 腾讯架构师工程师TCP认证课程 含DevOps


第08套:Kubernetes全栈架构师:基于世界500强的k8s实战课程(最新V1.21版本)


第09套:K8S微服务与容器云架构师(Linux云计算微服务架构师) 讲解实际生产内容知识体系视频课程


第10套:KubernetesK8s CKA认证实战班(完整版)BAT大厂基于K8s构建企业容器云平台


第11套:Kubernetes 原理剖析与实战应用-进阶高级架构师的必须选项视频教程


第12套:K8S集群实战,k8s各种扩展组件的部署和使用,k8s持久化存储,k8s代码自动发布教程


第13套:Docker与Kubernetes最佳实践-架构师必备技能docker入门到专精高阶视频教程


第14套:全面Docker系统性入门+进阶实战(Docker 知识体系及使用指南&最佳实践)


第15套:DevOps实战笔记-DevOps平台设计和开发视频教程


第16套:大厂进阶篇Docker与微服务实战-技术点从入门到高级全面覆盖视频教程


第17套:DevOps落地笔记视频教程-优化研发流程,提高研发效率和产品质量,解决企业实际遇到问题


第18套:微服务Service Mesh实战 Service Mesh实践和落地的学习内容视频教程


第19套:火遍大厂的Service Mesh服务实战课程 从组件到架构全方位解读微服务之Service Mesh


第20套:Istio服务网格服务治理微服务架构与设计全面解析视频


第21套:大厂Istio基础与实践 云原生“薪”能力合集,一线大厂实战分享视频教程


第22套:KubernetesK8s CKS 认证实战班-架构+网络+存储+安+监控+日志+QCD视频


第23套:Kubernetes网络训练营,为运维和开发打造的进阶体系课Flannel+Calico+Multus+Cilium


第24套:Kubernetes实战与源码剖析体系进阶班MSB,自动化运维管理多个跨机器Docker的集群


第25套:基于阿里云平台,从0构建云原生应用架构设计与开发实战,掌握云原生技术架构开发全流程


第26套:百万云原生架构师4期-掌握云原生架构师的9大顶级架构设计思维模型,架构设计哲学本质


第27套:基于Jenkins的DevOps工程实践 使用Jenkins完成DevOps交付流水线实践落地视频教程


第28套:Jenkins核心功能快速上手Jenkins企业级持续集成持续部署CICD(DI)视频教程


第29套:P7云原生架构师剑指未来,一站式搞定企业级云原生-专业技能+核心原理+方案设计+系统分析


第30套:前端配置化+后端Serverless开发个人博客(全栈+实战)HOOKS+Redux+Webpack+Immer


第31套:玩转Serverless架构 概念篇+开发基础篇+开发进阶篇+场景案例篇视频教程


第32套:Serverless进阶实战课 成为会Serverless懂 Serverless的工程师,云原生技术要红利


第33套:kubernetesk8s各个版本高可用集群灵活安装 掌握k8s日常运维视频教程


下载地址

39 套云原生实战训练营 K8s,挑战年薪 50 万(K8s+Docker+DevOps+Jenkins+CICD+Git+Istio+Service Mesh)

39 套云原生实战训练营 K8s,挑战年薪 50 万(K8s+Docker+DevOps+Jenkins+CICD+Git+Istio+Service Mesh)

【直播预告】程序员逆袭 CEO 分几步?

39 套云原生实战训练营 K8s,挑战年薪 50 万(K8s+Docker+DevOps+Jenkins+CICD+Git+Istio+Service Mesh)

48 套 K8s 云原生实战,微服务,容器自动化视频教程 K8s+Docker+DevOps+Jenkins+CICD

48 套 K8s 云原生实战,微服务,容器自动化视频教程 K8s+Docker+DevOps+Jenkins+CICD

【直播预告】程序员逆袭 CEO 分几步?

K8s 云原生实战,微服务,容器自动化视频教程 K8s+Docker+DevOps+Jenkins+CICD48 套 Java 项目架构视频教程 - 高并发,微服务,分布式,需求分析,业务选型,项目部署,架构设计,架构师,源码分析,设计模式,数据结构,数据库,业务选型,中间件,并发编程,需求分析,需求设计,项目部署,云原生,企业架构,架构设计,大型项目实战视频课程

JAVA 高级架构师技术包含:SpringBoot3.0,SpringCloudAlibaba,JDK11~19,Spring6,IOC,AOP,JavaWeb,SpringMVC,Mybatis,Docker,k8s,Devops,Vue3.0,Nginx,Redis7,MongoDB,JDBC,ShardingJDBC,Zookeeper,Dubbo,Activiti7,ES8,RabbitMQ,Redisson,Shiro,Paas,Neo4j,Kafka,Mycat,Tcp,ELK,SpringData,Tcp,JWT, POI,JVM 项目实战,电商项目,金融项目,商业代驾项目,网约车项目,在线教育项目,头条项目,12306 售票系统,医疗云平台项目,数字货币交易项目,自媒体项目实战,游戏开发项目,Es 搜索项目,支付项目,外卖项目,防抖音短频项目,云尚办公系统,租房网项目,交友项目,房产项目,人力资源管理系统,餐掌柜项目,基础框架,源码分析,设计模式,数据结构,数据库,业务选型,中间件,并发编程,高并发,分布式,微服务,性能优化,分库分表,日志开发,需求分析,需求设计,项目部署,云原生,企业架构,架构设计,高级架构等视频教程……

总目录:48 套 Java 项目架构视频教程 - 高并发,微服务,分布式,需求分析,业务选型,项目部署,架构设计,架构师,源码分析,设计模式,数据结构,数据库,业务选型,中间件,并发编程,需求分析,需求设计,项目部署,云原生,企业架构,架构设计,大型项目实战视频课程


第 01 套:SpringBoot3.0 最新深入浅出从入门到项目实战,突出 Web 应用痛点解决方案视频教程


第 02 套:新一代微服务全家桶 AlibabaCloud+Docker+JDK11 阿里云容器部署零基础到项目实战课程


第 03 套:Spring6 深入 IoC 和 AOP 底层实现,手写框架实现 IoC,老鸟可以进一步掌握 Spring 底层


第 04 套:Vue3.0 前端全套视频教程(Kerwin 精通,Vue.js 零基础,Vue3 入门到精通到项目实战)


第 05 套:最新 Java 23 种设计模式详解教程(图解 + 框架源码剖析)内容全面通俗易通视频教程


第 06 套:Java 算法突击训练营,6 周彻底攻克数据结构与算法,40 道高频真题大厂算法面试视频教程


第 07 套:Java 架构师之源码分析专题 SpringBoot2.x、Spring5、SpringMVC、Mybatis 源码分析课程


第 08 套:深入浅出 JDK 安装及 Java9 到 Java19 新版本特性深度剖析视频课程,多版本讲解 一套拿捏


第 09 套:JavaWeb 课程精华版 Springmvc+Nginx+Redis+Docker+Mybatis+Mysql+JDBC+Zookeeper


第 10 套:Docker 企业级实战从入门到高阶(7 个深度 3 个全面)- 基础篇 + 提升篇 + 高级篇视频教程


第 11 套:K8S+Docker (安全网络存储监控)+Devops+GitOPS+Istio+Containerd 容器大师进阶之旅


第 12 套:新版 ShardingJDBC 分库分表 mysql 数据库实战,深入浅出核心知识点 + 高级 超多案例实战


第 13 套:构建 JVM 知识体系 解决 Java 工程师必会的工作面试难点,关于 JVM 的问题通通解决教程


第 14 套:全网最强 Redis7 十大专题分类讲解,20 年老司机高薪 & 实战一把过视频教程


第 15 套:Java 进阶 Activiti7 工作流系统精讲教程 Activiti 和 Spring 及 Springboot 框架项目整合视频课程


第 16 套:ES8 搜索引擎从入门到深度原理,实现综合运用实战 - 音乐 App 搜索项目 + 本地生活类 App 搜索项目


第 17 套:云原生架构进阶:基于工业级 PaaS 云平台的 Spring Cloud Alibaba 和 JDK 11 综合项目实战


第 18 套:6 大数据库,挖掘 7 种业务场景的数据库解决方案 MySQL、Redis、Neo4j、HBASE、MongoDB、ES 选型与开发


第 19 套:最新 Java 日志框架教程由浅入深全面精讲多种日志框架视频课程(log4j slf4j logback jul juc springboot )


第 20 套:Java 微服务体系 自媒体实战视频课程 SpringCloudAlibaba+Nginx+Zuul+Mysql+RabbitMQ+ES+Vue


第 21 套:多端全栈项目实战:大型商业级代驾业务全流程落地 SpringCloudAlibaba+Mysql+Redis+Docker+Uniapp+Vue3


第 22 套:Java 网约车实战 - 以网约车为例,切入分布式项目,互联网高并发项目需求分析(乘客端、司机端、车机端、大屏端)


第 23 套:Java 企业级实战开发《学成在线》微服务项目 SpringBoot+SpringCloud+MyBatis-Plus+Nginx+MQ+Redis+ES


第 24 套:亿级流量 Java 电商秒杀项目架构企业级视频课程 SpringCloud+Redis+Mycat+DDD+Docker+K8s+ShardingSphere


第 25 套:Java 企业级项目《尚上优选》SpringCloudAlibaba+Mybatis-Plus+Redisson+MQ+ES+Kibana+OSS+Knife4j+Nginx


第 26 套:Java 大型企业级 头条项目实战 Springboot+SpringCloudAlibaba+Docker+Vue+Mysql+Redis+Kafka+ES+MongoDB


第 27 套:体系化掌握 Java 分布式架构设计与开发实战,打通后端进阶关键一环,高性能、高并发、高可用的分布式架构


第 28 套:Java 零基础实训项目(东宝商城)课程 - 商品需求分析 + 商品中心设计 + 代码生成 + 验证码 + 代码安全 + 接口防篡改


第 29 套:Java 前后端分离分布式高并发医疗云平台 SpringCloudAlibaba+Shiro+RocketMQ+Docker+Mycat+Redis+Nginx


第 30 套:新版 Springboot3.0 打造能落地的高并发仿 12306 售票系统,带你学习各种高并发场景的解决方案视频课程


第 31 套:Java 企业级前后端分离 - 数字货币交易所项目 SpringCloud+MongoDB+Mysql+Redis+Kafka+MybatisPlus


第 32 套:Java 企业级瑞吉外卖项目实战 SpringBoot+Nginx+Mysql+Mybatis-Plus+Redis+VUE+H5+Git+Linux


第 33 套:P8 商城 - 大型互联网架构进行设计 - 三大部分:需求分析、软件设计开发、软件实施自动化部署架构视频课程


第 34 套:云尚办公系统 Java 企业级项目实战 SpringBoot+Vue+MybatisPlus+SpringSecurity+Redis+Activiti+Mysql


第 35 套:SpringBoot+Uniapp 实战开发仿抖音 App, 抓住短视频 Mybatis+MinIO+Nacos+MQ+MongoBD+redis+Nginx


第 36 套:SpringCloud+Vertx+Disruptor 证券金融业撮合交易系统实战,做金蝶动技领域的 IT 工程师视频课程


第 37 套:Java 前后端分离电商商城项目 SpringCloudAlibaba+RabbitMQ+Mysql+Solr+Redis+VSFTPD+Vue


第 38 套:Java 前后端分离企业级租房网项目 SpringBoot+Spring Cloud+SpringData+ES+MongoDB+Redis


第 39 套:Java 前后端分离探花交友项目 VUE+Dubbo+RabbitMQ+Redis+Mysql+MongoDB+SparkMllib+SpringCache


第 40 套:Java 尚好房项目 + 高薪提升课 SPringBoot+SpringCloud+Redis+Nginx+RabbitMQ+Docker+ES+Dubbo+Docker


第 41 套:Java 在线支付开发教程支付宝支付 & 微信支付项目实战视频课程,梳理流程关系,手把手的编写代码


第 42 套:SaaS-iHRM 人力资源管理系统 SpringBoot+SpringCloud+SpringData+Vue+Shiro+JWT+Activiti7+POI


第 43 套:MSB-Java 游戏开发真实项目 — 英雄传说 高并发游戏后端真实项目视频课程


第 44 套:多端基于 SaaS 的餐掌柜项目实战 - SpringCloudAlibaba+Vue+MQ+Redis+ES+TCP+Mysql+ELK+Docker


第 45 套:2023 版 Java 面试宝典 Java 面试 200 题(含美团 字节 阿里大厂真题及面试答题技巧)


第 46 套:资深 CTO & 架构师讲 Java 亿级项目架构设计与落地应用 - 需求分析 + 高层架构设计 + 系统架构设计 + 架构落地课程


第 47 套:MY-Java 架构师精英学习实战营 - 微服务 分布式 高并发 性能优化 企业架构 源码分析 运维部署 项目实战 设计框架


第 48 套:狂野架构师 - Java 架构师起步篇 + 进阶篇 + 深入篇 + 云原生篇 + 架构百宝箱篇 + 源码分析篇 + 架构设计篇 + 项目实战篇课程

 

今天的关于k8s Pipline CI/CD的分享已经结束,谢谢您的关注,如果想了解更多关于.Net Core2.1 秒杀项目一步步实现CI/CD(Centos7.2)系列二:k8s高可用集群搭建总结以及部署API到k8s、33套云原生实战训练营K8s,挑战年薪50万K8s+Docker+DevOps+Jenkins+CICD+Git+Istio+Service Mesh、39 套云原生实战训练营 K8s,挑战年薪 50 万(K8s+Docker+DevOps+Jenkins+CICD+Git+Istio+Service Mesh)、48 套 K8s 云原生实战,微服务,容器自动化视频教程 K8s+Docker+DevOps+Jenkins+CICD的相关知识,请在本站进行查询。

本文标签: