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,我们在博客中介绍了这种方法的各种好处:
另请参阅:
- Storing Secure Sealed Secrets using GitOps
- Technical Overview.
- Weave Flux: The VCS Reconciliation Operator Source Code on Github
免责声明:我是 Kubernetes 贡献者和 Weaveworks 员工。我们构建开源和商业工具,帮助人们更快地使用 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,我们在博客中介绍了这种方法的各种好处:
另请参阅:
- Storing Secure Sealed Secrets using GitOps
- Technical Overview.
- Weave Flux: The VCS Reconciliation Operator Source Code on Github
免责声明:我是 Kubernetes 贡献者和 Weaveworks 员工。我们构建开源和商业工具,帮助人们更快地使用 Kubernetes 投入生产。