【问题标题】:Usage of Kubectl command and deployment of pods using Kubernetes and JenkinsKubectl 命令的使用和使用 Kubernetes 和 Jenkins 部署 Pod
【发布时间】:2019-01-09 06:08:33
【问题描述】:

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

我的要求

当对我的 SVN 代码存储库进行提交时,Jenkins 需要从 Subversion 存储库中提取代码并需要构建项目、创建 docker 映像、推送到 Docker hub - 如前所述。之后需要通过 Jenkins 拉取从 Dockerhub 部署到我的测试环境中。

我的困惑

  1. 我在创建服务和 pod 时,如何在 pod/services/statefulsets 中定义 docker 映像路径?因为它从 Docker 中心拉出进行部署。
  2. 我可以在 Jenkins 流水线调度作业中直接添加 kubectl 命令吗?如何使用 kubectl 命令进行 Kubernetes 部署?

【问题讨论】:

    标签: jenkins kubernetes


    【解决方案1】:

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

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

    关于来自 Docker Hub 的图像:

    无论如何,Docker Hub 是 Docker 的默认 Docker Registry,因此通常只有在您想使用自己的 Private Hosted Registry 时才需要更改集群中的任何内容。如果您在任何云提供商处运行集群,我会使用 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访问您的集群

    所以一个简单的管道需要简单地执行以下步骤:

    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 映像并确保标签的唯一性。例如,对于 Java 和 Maven,您可以将 Maven CI Friendly Versions 与任何 maven docker 插件或 jib 一起使用。

    【讨论】:

    • 如果我在 dockerhub 中有像 "loadFinancialReport" 这样的 docker 镜像,那么我是否只需要在服务中提及像 "Image: loadFinancialReport" ?它将直接从 dockerhub 拉取?
    • 你的图像应该有一个前缀,这通常是你的 docker hub 名称,这看起来像 mszalbach/loadFinancialReport。此外,这仅在您拥有最新版本时才有效。当您只创建 unqiue 版本时,您还需要在图像属性中指定它:mszalbach/loadFinancialReport:0.0.1-SNAPSHOT。
    【解决方案2】:

    要创建部署,您需要创建一个 yaml 文件。 在 yaml 文件中你的行:

    image: oronboni/serviceb
    

    将您带到 DockerHub 中的容器:

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: serviceb
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: serviceb
      template:
        metadata:
          labels:
            app: serviceb
        spec:
          containers:
          - name: serviceb
            image: oronboni/serviceb
            ports:
            - containerPort: 5002 
    

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

    祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-31
      • 2019-04-25
      • 1970-01-01
      • 2020-03-03
      相关资源
      最近更新 更多