惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Troy Hunt's Blog
P
Proofpoint News Feed
V
Vulnerabilities – Threatpost
C
Cybersecurity and Infrastructure Security Agency CISA
K
Kaspersky official blog
Cyberwarzone
Cyberwarzone
T
Tor Project blog
Cisco Talos Blog
Cisco Talos Blog
S
Securelist
L
Lohrmann on Cybersecurity
Security Latest
Security Latest
T
Threatpost
H
Heimdal Security Blog
W
WeLiveSecurity
A
Arctic Wolf
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
GRAHAM CLULEY
IT之家
IT之家
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
TaoSecurity Blog
TaoSecurity Blog
A
About on SuperTechFans
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
N
News and Events Feed by Topic
Hacker News - Newest:
Hacker News - Newest: "LLM"
Last Week in AI
Last Week in AI
T
The Blog of Author Tim Ferriss
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Microsoft Azure Blog
Microsoft Azure Blog
Hugging Face - Blog
Hugging Face - Blog
Google DeepMind News
Google DeepMind News
量子位
Stack Overflow Blog
Stack Overflow Blog
Know Your Adversary
Know Your Adversary
B
Blog RSS Feed
阮一峰的网络日志
阮一峰的网络日志
WordPress大学
WordPress大学
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
AI
AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
GbyAI
GbyAI
Vercel News
Vercel News
C
Cyber Attacks, Cyber Crime and Cyber Security
Latest news
Latest news
D
Darknet – Hacking Tools, Hacker News & Cyber Security
大猫的无限游戏
大猫的无限游戏
Forbes - Security
Forbes - Security

陈少文的网站

巨变与机遇的未来十年 Kubernetes 平台管理软件压力测试方案 使用镜像部署 Hexo 静态页面 终于等到你 - GitHub 镜像仓库服务(ghcr.io) 一起来学 Go --(6)Interface 一起来学 Go --(5)Goroutine 和 Channel 什么是函数式编程 如何在 Kubernetes 集群集成 Kata 柯里化与偏函数 使用 PyGithub 自动创建 Label 软件产品是团队能力的输出 Helm 2 、Helm 3 比较 IoT 变现 Kubernetes 中的 DNS 服务 国内的 Helm 镜像源 Harbor 使用自签证书支持 Https 访问 DevOps 工具链之 Prow 如何使用 kfctl 安装 Kubeflow VS Code 无法下载 Go 插件的工具包 工程师更应具有服务精神 你不知道的 Docker 使用技巧 使用 Docker 运行 Tensorflow 论中国 什么是左移 如何清空 Git 仓库全部历史记录 一禅小和尚 有风吹过厨房 时间的玫瑰 如何在 CentOS 安装 GPU 驱动 开发 Tips(19) 使用 Velero 备份 Kubernetes 集群 Kubernetes Cheat Sheet 开发 Tips(18) 如何构建一个 Java 工程 开发 Tips(17) KubeSpray 安装 Kubernetes 报错 ip in ansible_all_ipv4_addresses 基于 Kubernetes 和 Jenkins 搭建自动化测试系统 在 Kubernetes 上动态创建 Jenkins Slave 使用 Jenkins 进行服务拨测 开发 Tips(16) Kubernetes 签发 Ingress 证书及日常故障运维 Kubernetes 中 Deployment 的基本操作 Kubernetes 中的证书 如何使用 KubeBuilder 开发一个 Operator Kubernetes 1.6.0 安装问题汇总 镜像管理工具 -- Harbor 开发 Tips(15) Docker 如何拉取镜像 开发 Tips(14) 使用 Helm 安装 harbor 开发 Tips(13) 使用 S2I 构建云原生应用 在 Kubernetes 中使用 emptyDir、hostPath、localVolume 开发 Tips(12) 开发 Tips(11) 代码质量分析工具 SonarQube 使用 Kubeadm 安装 Kubernetes 集群 一起来学 Go --(4)常用函数 Kubernetes 中的 Ceph Kubernetes 之 Volumes Kubernetes 之 Labels、Selectors 开发 Tips(10) 开源正在重构商业模式 Kubernetes 之网络 Kubernetes 之 API 使用 Helm 和 Operator 快速部署 Prometheus Kubernetes 复杂有状态应用管理框架 -- Operator Kubernetes 的包管理器 -- Helm 一起来学 Go --(3)Go Modules 如何一步一步地优化博客方案 kubectl 实用指南 Kubernetes 中的基本概念 搭建远程 Kubernetes 开发环境 大公司和小公司的 ToB 思路 开发 Tips(9) Go 入门指南 一起来学 Go --(2)数据与逻辑结构 如何预防 Web 富文本中的 XSS 攻击 django-xss-cleaner 云工作时代 一起来学 Go --(1)背景与特点 SaaS 开发团队的不同阶段 你不知道的 Git 使用技巧 输出既服务 微服务设计 继续奔跑 开发 Tips(8) 从账户安全到二次验证 Django 性能之数据库查询优化 Django 性能之分库分表 敏捷开发之研发流程 打造一致性的团队 开发 Tips(7) Pytest 进阶学习之 Mock PaaS 部署之 buildpack Go 开发配置 领域输出才是 PaaS 的核心竞争力 Pytest 入门学习 开发 Tips(6) 如何使用 Jenkins、Docker、GitLab 搭建 Django 自动化部署流程
Jenkins X 不是 Jenkins ,而是一个技术栈
微信公众号 · 2020-08-16 · via 陈少文的网站

1. Jenkins X 简介

Jenkins 依靠庞大的插件生态,占据了目前大部分的企业级 CICD 引擎的份额。但在云原生时代,Jenkins 也暴露出很多的问题,单点服务、磁盘存储、内存占用等。

Jenkins X 围绕 Kubernetes,提供了一种更适合云原生时代的 DevOps 方式。Jenkins X 不是 Jenkins 的发行版本,准确来说,Jenkins X 是一个应用发布部署的技术栈。

在研发方面,通过 jx 命令,开发者可以新建仓库、生成应用脚手架、运行流水线、发布部署,最终运行在 Kubernetes 上。Jenkins X 给开发者提供了非常一致的开发体验。

在部署方面,通过 Terraform 提供的能力,可以在主流云厂商上直接创建集群。除此,Jenkins X Environment 还提供了对多环境的支持,通过定义环境之间的升级规则,各个环境上的应用可以很方便地进行发布、回滚、迁移。Jenkins X 给运维人员带来了极大便利。

一句话,Jenkins X 是面向云原生的一站式 DevOps 技术栈。

2. 架构和原理

设计架构:

概念模型:

上面两张图来自 Jenkins X 官网,通过这两张图可以很快了解 Jenkins X 在做什么,想做什么。Jenkins X 针对的是多环境多版本的多人团队,提供基于 Kubernetes 的应用开发、部署服务。

下面这张图提供了相关组件的概览:

GitOps - 通过 Git 提交变更、使用 PR 进行授权的资源管理思想。

数据存储 - Git Repo。GitOps 驱动着 Jenkins X 。Jenkins X 对基础设施、配置、应用的所有变更,都记录在 Git Repo 中。当有 Git 事件发生时,触发 Jenkins X 执行。Jenkins X 只需要关注 Webhook 事件,仅当有 Git 事件发生时,才会动态创建 Pod 执行相应动作。

事件驱动 - Prow/Lighthouse 。Kubernetes 使用 Prow 用于 ChatOps ,通过标签语义,可以驱动研发流程。但 Prow 严重依赖于 Github ,很难对其他 SCM 进行扩展,为此产生了 Lighthouse 项目。

应用开发 - Draft/Skaffold 。针对开发者,在 Kubernetes 上开发云原生应用的工具。通过 Draft/Skaffold 完成对应用的初始化、部署,开发者可以很方便地迭代应用代码,在本地或远程 Kubernetes 集群中进行验证。

发布管理 - Helm 。一款对 Kubernetes 应用进行管理的工具,类似 CentOS 上的 Yum ,Ubuntu 上的 Apt 。使用 Helm 可以实现对应用的部署、升级、回退、删除操作。

流程编排 - Jenkins/Tekton/Knative 。Tekton 通过 Kubernetes CRD 定义流水线的 CICD 系统。在旧的版本中,可以使用 Jenkins 作为编排引擎,但是 Jenkins X 从今年 3 月份开始已经转向 Tekton 。Tekton 是 Knative 的 build-pipeline 项目前身。Knative 提供了对任务的处理和管理能力。

包管理仓库 - Nexus 。支持许多主流的软件包格式,Docker、npm、Yum、Maven 等。

3. 在 Kubernetes 上安装 Jenkins X

通过 jx create cluster 命令,使用 Terraform 可以直接创建集群,将集群作为配置信息进行管理。

最新的 Jenkins X (2.1.132)推荐使用 jx boot 命令进行安装,支持 GKE,EKS ,其他 Kubernetes 需要自行检查兼容性。这里是 Jenkins X on Kubernetes 兼容性对照表。我在自建的集群上尝试了下,坑还比较多,可以再等等,或者给社区提交 PR 。下面使用 jx install 命令进行安装。

3.1 安装要求

  • Kubernetes 版本 > 1.8
1
2
3
4
kubectl version

Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.13", GitCommit:"39a145ca3413079bcb9c80846488786fed5fe1cb", GitTreeState:"clean", BuildDate:"2020-07-15T16:18:19Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.13", GitCommit:"39a145ca3413079bcb9c80846488786fed5fe1cb", GitTreeState:"clean", BuildDate:"2020-07-15T16:10:14Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
  • 确认开启 RBAC
1
2
3
kubectl cluster-info dump | grep authorization-mode

                            "--authorization-mode=Node,RBAC",
  • 配置有默认的 Storage Class
1
2
3
4
kubectl get sc

NAME              PROVISIONER        AGE
local (default)   openebs.io/local   2m
  • 集群 Master 节点 CPU 最少 4 C

3.2 安装 jx、Git 客户端

  • 安装 Jenkins X 客户端

这里没有使用 2.x 的版本,而是使用的最后一个 1.x 版本。在后面的文档中,我会继续关注相关的演变。

1
2
curl -L https://github.com/jenkins-x/jx/releases/download/v1.3.1119/jx-linux-amd64.tar.gz | tar xzv
mv jx /usr/local/bin

查看版本:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
jx version

NAME               VERSION
jx                 1.3.1119
jenkins x platform 2.0.2375
Kubernetes cluster v1.16.13
kubectl            v1.16.13
helm client        v2.16.10+gbceca24
helm server        v2.16.10+gbceca24
git                git version 2.24.1
Operating System   CentOS Linux release 7.6.1810 (Core)
  • 安装 Git 2.x

如果使用 Git 1.x 的版本,可能会遇到类似下面的错误:

1
FATAL: initialise build packs failed: there was a problem ensuring the branch master has tracking info: git output: error: pathspec 'master' did not match any file(s) known to git.: failed to run 'git checkout master' command in directory '/root/.jx/draft/packs/github.com/jenkins-x-buildpacks/jenkins-x-kubernetes', output: 'error

解决办法是,进入提示目录,手工拉取。

1
2
cd /root/.jx/draft/packs/github.com/jenkins-x-buildpacks/jenkins-x-kubernetes
git pull

更好的方法是,升级 Git 的版本至 2.x ,下面以 CentOS 7 为例:

1
2
3
4
5
6
yum remove git*
yum -y install https://packages.endpoint.com/rhel/7/os/x86_64/endpoint-repo-1.7-1.x86_64.rpm
yum install -y git
git version

git version 2.24.1

3.3 测试集群是否满足要求

在安装完 jx 命令之后,可以使用下面的命令进行检测:

大约需要运行几十分钟,运行下面的命令可以看到最终的执行结果:

最后删掉相关负载:

3.4 安装 Jenkins X 服务端

Jenkins X 内置的服务组件依赖 Ingress ,可以根据文档 使用 Helm 安装 Ingress 提前安装。

  • 开始安装

接着会有一系列交互:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
? Cloud Provider kubernetes
...
> [x]  helm
  [x]  kubectl
...
? Please enter the name you wish to use with git:  shaowenchen
? Please enter the email address you wish to use with git:  mail@chenshaowen.com
...
? Would you like wait and resolve this address to an IP address and use it for the domain? Yes
...
? Domain dev.chenshaowen.com
...
? github.com username: shaowenchen
...
Please click this URL and generate a token
https://github.com/settings/tokens/new?scopes=repo,read:user,read:org,user:email,write:repo_hook,delete_repo

? API Token: *****************************************
? Select Jenkins installation type: Serverless Jenkins
? Pick default workload build pack:  Kubernetes Workloads: Automated CI+CD with GitOps Promotion
Jenkins X installation completed successfully
INFO[0094]

	********************************************************

	     NOTE: Your admin password is: Sr5!8LZz!QfMD84KBZWR

	********************************************************
  • 设置 Ingress Controller

如果使用 Jenkins X 提供的 Ingress Controller 则需要提供 LB 或者手工增加 externalIPs 。下面将 externalIPs 设置为机器 eth0 的 IP ,绑定 EIP 之后,将域名解析到 EIP 即可访问服务。

1
2
3
4
5
kubectl -n kube-system edit svc jxing-nginx-ingress-controller

spec:
  externalIPs:
  - 192.168.13.74
  • 查看服务
1
2
3
4
5
6
kubectl get ingress -n jx

NAME              HOSTS                                    ADDRESS         PORTS   AGE
chartmuseum       chartmuseum.jx.dev.chenshaowen.com       192.168.13.74   80      2m
docker-registry   docker-registry.jx.dev.chenshaowen.com   192.168.13.74   80      2m
nexus             nexus.jx.dev.chenshaowen.com             192.168.13.74   80      2m

如果没有可控的公网域名,在安装过程中,可以选择 nip.io 提供的域名,通过本地配置 hosts 进行访问:

1
2
3
x.x.x.x chartmuseum.jx.192.168.13.74.nip.io
x.x.x.x docker-registry.jx.192.168.13.74.nip.io
x.x.x.x nexus.jx.192.168.13.74.nip.io

3.6 安装插件

Jenkins X 通过 Helm Chart 管理插件和应用,在 jenkinx-x/jx 仓库中可以查看已经集成的插件。通过 jx 命令,可以很方便地安装相关的插件,下面是部分插件列表。

  • ambassador - Create an ambassador addon
  • anchore - Create the Anchore addon for verifying container images
  • environment - Create an Environment Controller to handle webhooks and promote changes from GitOps
  • flagger - Create the Flagger addon for Canary deployments
  • gitea - Create a Gitea addon for hosting Git repositories
  • gloo - Create a Gloo and Knative Serve addon for creating serverless applications
  • ingress - Create an Ingress Controller to expose services outside of your remote Staging/Production cluster
  • istio - Create the Istio addon for service mesh
  • kubeless - Create a kubeless addon for hosting Git repositories
  • owasp-zap - Create the OWASP Zed Attack Proxy addon for dynamic security checks against running apps
  • pipeline-events - Create the pipeline events addon
  • prometheus - Creates a prometheus addon
  • prow - Create a Prow addon

这里安装 Prow 用于 ChatOps

1
jx create addon prow -n jx
1
2
3
4
5
6
7
8
9
kubectl get ingress -n jx

NAME                HOSTS                                      ADDRESS         PORTS   AGE
chartmuseum         chartmuseum.jx.dev.chenshaowen.com         192.168.13.74   80      2m
deck                deck.jx.dev.chenshaowen.com                192.168.13.74   80      2m
docker-registry     docker-registry.jx.dev.chenshaowen.com     192.168.13.74   80      2m
hook                hook.jx.dev.chenshaowen.com                192.168.13.74   80      2m
nexus               nexus.jx.dev.chenshaowen.com               192.168.13.74   80      2m
tide                tide.jx.dev.chenshaowen.com                192.168.13.74   80      2m

3.5 卸载 Jenkins X

1
2
jx uninstall
rm -rf /root/.jx

4. Jenkins X 使用

4.1 环境管理

  • 查看环境
1
2
3
4
5
6
jx get env

NAME       LABEL       KIND        PROMOTE NAMESPACE     ORDER CLUSTER SOURCE                                                             REF PR
dev        Development Development Never   jx            0
staging    Staging     Permanent   Auto    jx-staging    100           https://github.com/shaowenchen/environment-antdisco-staging.git
production Production  Permanent   Manual  jx-production 200           https://github.com/shaowenchen/environment-antdisco-production.git

Jenkins X 在 Git Repo 中对基础设置进行存储,通过 PR 进行修改管理。

  • 删除环境
  • 创建环境

4.2 应用开发

  • 创建应用
1
2
3
4
5
6
7
8
jx create quickstart

? Do you wish to use shaowenchen as the Git user name? Yes
? Which organisation do you want to use? shaowenchen
? Enter the new repository name:  jx-quickstart-demo
? select the quickstart you wish to create jx-quickstart-demo
INFO[0035] Pushed Git repository to https://github.com/shaowenchen/jx-quickstart-demo
INFO[0051] Creating GitHub webhook for shaowenchen/jx-quickstart-demo for url http://hook.jx.dev.chenshaowen.com/hook

也可以直接从线上或者本地导入应用

1
jx import --url https://github.com/shaowenchen/jx-quickstart-demo.git

在页面上可以看到初始化的仓库和 Webhook 配置信息。

5. 参考