使用Kubectl命令和使用Kubernetes和Jenkins部署Pod

时间:2018-08-01 15:31:10

标签: jenkins kubernetes

我正在尝试为我的春季启动微服务部署实现CI / CD管道。在这里,我有一些微服务示例。当我探索Kubernetes时,我发现了pod,服务,副本集/控制器,有状态集等。我正确理解了这些Kubernetes术语。我计划将Docker Hub用于我的映像注册表。

我的要求

当对我的SVN代码存储库进行了提交时,Jenkins需要从Subversion存储库中提取代码,并需要构建项目,创建docker映像,推送到Docker中心-如前所述。然后,需要由詹金斯(Jenkins)拉动,从Dockerhub部署到我的测试环境中。

我的困惑

  1. 我在创建服务和Pod时,如何在pod / services / statefulsets中定义docker映像路径?因为它是从Docker集线器进行部署的。
  2. 我可以在Jenkins管道计划作业中直接添加kubectl命令吗?如何使用kubectl命令进行Kubernetes部署?

2 个答案:

答案 0 :(得分:3)

只要工具已安装且可访问,Jenkins可以做任何事情。因此,一个简单的解决方案是在Jenkins上安装docker和kubectl并为他提供正确的kube配置,以便他可以访问集群。因此,如果您的主机可以使用kubectl,则可以查看$HOME/.kube/config文件。

因此,在工作中,您可以像从主机上一样使用kubectl。

关于来自Docker Hub的图像:

无论如何,Docker Hub都是Docker的默认Docker注册表,因此通常仅在您要使用自己的私有托管注册表时才需要更改集群中的任何内容。如果您在任何云提供商处运行集群,那么我会在此使用Docker注册表,因为它们可以更好地集成。

因此,部署的这一部分将从Docker Hub中提取nginx,而无需为其指定任何特殊内容:

    spec:
      containers:
      - name: nginx
      Image: nginx:1.7.9

因此,请确保Jenkins可以从命令行执行以下操作:

  1. 构建Docker映像
  2. 推送Docker映像(确保您在Jenkins上调用了docker login)
  3. 通过kubectl get pods
  4. 访问您的集群

因此,简单的管道只需执行以下步骤:

  1. 触发SVN更改
  2. 结帐代码
  3. 创建一个唯一的版本,该版本可以是内部版本号,SVN修订版,日期)
  4. 构建/测试
  5. 构建Docker映像
  6. 使用唯一版本标记Docker映像
  7. 推送Docker映像
  8. 将Kubernetes deployment.yaml中的图像行更改为新生成的版本(如果您使用的是Jenkins Pipeline,则可以使用readYaml,writeYaml来实现)
  9. 致电kubectl apply -f deployment.yaml

根据您所使用的构建系统和所使用的语言,有一些有用的工具可以帮助构建和推送Docker Image并确保唯一的标签。例如,对于Java和Maven,您可以将Maven CI Friendly Versions与任何maven docker插件或jib结合使用。

答案 1 :(得分:1)

要创建部署,您需要创建yaml文件。 在yaml文件中,该行: 图片:oronboni / serviceb

将您带到本例中的DockerHub中的容器。

apiVersion:扩展程序/ v1beta1 种类:部署 元数据:   名称:serviceb   命名空间:默认 规格:   复制品:1   选择器:     matchLabels:       应用:serviceb   模板:     元数据:       标签:         应用:serviceb     规格:       容器:       -名称:serviceb         图片:oronboni / serviceb         端口:         -containerPort:5002

我强烈建议您在以下链接中看到kubernetes部署网络研讨会: https://m.youtube.com/watch?v=_vHTaIJm9uY

祝你好运。