Jenkins CD 管道到 Kubernetes

Jenkins CD Pipeline to Kubernetes

我打算与 Jenkins 建立一个 CD 管道,它接收我的应用程序,将 docker 图像发布到我的私有 docker 存储库。我想我知道该怎么做。

我不确定的是 Kubernetes 部分。我想获取该映像并将其部署到我的私有 Kubernetes 集群(目前有 1 个主站和 1 个从站)。

问题:安装了 kubectl 和 docker 的 Jenkins Slave 是否需要成为 Kubernetes 集群的一部分才能触发部署?我怎样才能触发该部署?

您可以使用 kubectl 命令从 Yenkin 触发部署。对于快速启动,将 kubernetes 集群 admin.conf 或 $HOME/.kube/config 文件复制到 Jenkin 从服务器。然后你可以 运行 kubectl 像这样。

 Kubectl  --kubeconfig=admin.conf create –f <deployment.yml>

注:

这将授予对集群的完全管理员访问权限,长期而言,您可以创建具有部署角色的帐户并使用该帐户进行部署。

假设您的集群中有以下部署:

apiVersion: apps/v1beta1 # for versions before 1.6.0 use 
extensions/v1beta1
kind: Deployment
metadata:
   name: foobar-deployment
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: foobar-app
    spec:
      containers:
      - name: foobar
        image: foobar-image:v1
        ports:
        - containerPort: 80

你必须以某种方式让 Jenkins 告诉你的 Kubernetes master 以下命令:

kubectl set image deployment/foobar-deployment foobar=foobar-image:version

其中 version 是您刚刚使用 Jenkins 创建的新版本。这将自动触发此版本的重新部署。

只要您有权访问上面有您的集群的 Kubernetes master(通过 ssh 或类似方式),您就可以通过上述命令。传递此命令时,不要忘记跟踪 version

I'm intending to have a CD Pipeline with Jenkins which takes my application, publishes a docker image to my private docker repository. I think I know how to do that.

没错,这是我们都熟悉的部分。

我的建议是,您实际上不需要在 CI 中做更多事情。

What I'm unsure about it the Kubernetes part. I want to take that image and deploy it to my private Kubernetes cluster (currently 1 Master & 1 Slave).

很难可靠地使用 CI 作为真实来源,您可以在其中跟踪部署的内容。您可以做的是将应用程序配置(部署+服务 YAML 文件)存储在 git 存储库中,并使用 git 协调运算符将该存储库连接到集群,您甚至可以通过这种方式设置多个集群.

Question: Does that Jenkins Slave which has kubectl and docker installed need to be part of the Kubernetes cluster in order to trigger a deployment? How can I trigger that deployment?

有些人在他们的 Kubernetes 集群中做 运行 CI(比如 Jenkins),这是一种 legitimate 方法,但是,这意味着你有更多的事情要做运行,并将您自己从所有托管的 CI 选项中剔除。

我们已经实践了一段时间的方法称为 GitOps,我们在博客中介绍了这种方法的各种好处:

另请参阅:


免责声明:我是 Kubernetes 贡献者和 Weaveworks 员工。我们构建开源和商业工具,帮助人们更快地使用 Kubernetes 投入生产。