本文的部署实践过程参考了云栖文章 如何在阿里云容器服务上搭建 Jenkins X 并记录了更详细的过程及日志输出.
下面我们开始介绍如何在阿里云容器服务 Kubernetes 上快速安装部署 Jenkins X.
首先, 需要在 阿里云容器服务控制台 创建一个 Kubernetes 集群, 本次实践使用的环境信息如下:
- 192.168.0.134
- master2 192.168.0.135
- master3 192.168.0.136
- worker1 192.168.0.137
登录 worker1 节点 (也可以使用集群外的任意 ecs 环境) 并初始化 helm client
- # mkdir $HOME/.kube
- # scp root@192.168.0.134:/etc/kubernetes/kube.conf $HOME/.kube/config
- root@192.168.0.134's password:
- kube.conf 100% 5472 8.4MB/s 00:00
- # scp root@192.168.0.134:/usr/local/bin/helm /usr/local/bin/helm
- root@192.168.0.134's password:
- helm 100% 29MB 104.0MB/s 00:00
- # helm init --client-only
- Creating /root/.helm
- Creating /root/.helm/repository
- Creating /root/.helm/repository/cache
- Creating /root/.helm/repository/local
- Creating /root/.helm/plugins
- Creating /root/.helm/starters
- Creating /root/.helm/cache/archive
- Creating /root/.helm/repository/repositories.YAML
- Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com
- Adding local repo with URL: http://127.0.0.1:8879/charts
- $HELM_HOME has been configured at /root/.helm.
- Not installing Tiller due to 'client-only' flag having been set
- Happy Helming!
安装 Git.
yum install Git -y
安装 jx 客户端
- # curl -L https://github.com/jenkins-x/jx/releases/download/v1.3.464/jx-linux-amd64.tar.gz | tar xzv
- # mv jx /usr/local/bin
- # jx version
- Using helmBinary helm with feature flag: none
- NAME VERSION
- jx 1.3.464
- Kubernetes cluster v1.11.2
- kubectl v1.11.2
- helm client v2.9.1+g20adb27
- helm server v2.9.1+g20adb27
- Git Git version 1.8.3.1
- A new jx version is available: 1.3.470
- ? Would you like to upgrade to the new jx version? No
下载 cloud-environments 云环境配置文件
- # mkdir -p ~/.jx
- # cd ~/.jx
- # Git clone https://github.com/qinyujia/cloud-environments.git
正克隆到'cloud-environments'...
- remote: Enumerating objects: 526, done.
- remote: Total 526 (delta 0), reused 0 (delta 0), pack-reused 526
接收对象中: 100% (526/526), 229.61 KiB | 261.00 KiB/s, done.
处理 delta 中: 100% (263/263), done.
安装 jenkins-x-platform 到 Kubernetes 集群
# jx install --provider=kubernetes --domain aliyunk8s.com
访问日志中提示的 GitHub URL 并生成 API Token:
https://github.com/settings/tokens/new?scopes=repo,read:user,read:org,user:email,write:repo_hook,delete_repo
新打开一个终端窗口查看 jenkins-x-platform 各个组件的安装情况:
- # kubectl get ing -n jx
- NAME HOSTS ADDRESS PORTS AGE
- chartmuseum chartmuseum.jx.aliyunk8s.com xx.xx.xxx.xxx 80 49s
- docker-registry docker-registry.jx.aliyunk8s.com xx.xx.xxx.xxx 80 49s
- jenkins jenkins.jx.aliyunk8s.com xx.xx.xxx.xxx 80 48s
- monocular monocular.jx.aliyunk8s.com xx.xx.xxx.xxx 80 49s
- nexus nexus.jx.aliyunk8s.com xx.xx.xxx.xxx 80 49s
绑定 hosts:
- # cat /etc/hosts
- 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
- ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
- xx.xx.xxx.xxx chartmuseum.jx.aliyunk8s.com
- xx.xx.xxx.xxx docker-registry.jx.aliyunk8s.com
- xx.xx.xxx.xxx jenkins.jx.aliyunk8s.com
- xx.xx.xxx.xxx monocular.jx.aliyunk8s.com
- xx.xx.xxx.xxx nexus.jx.aliyunk8s.com
查看 jenkins-x-platform 组件的安装情况:
- [root@iZj6cbxzol17fruawjffz1Z ~]# kubectl get pod -n jx
- NAME READY STATUS RESTARTS AGE
- jenkins-67d7cc5fcd-x6686 1/1 Running 0 8m
- jenkins-x-chartmuseum-84b895f4c5-d2dgc 1/1 Running 0 8m
- jenkins-x-docker-registry-6b6f6d67b6-kn9ml 1/1 Running 0 8m
- jenkins-x-heapster-65fd697bb-4czvz 2/2 Running 0 8m
- jenkins-x-MongoDB-784f66c466-zz429 0/1 Pending 0 8m
- jenkins-x-monocular-API-58796c57c9-xk8rs 0/1 CrashLoopBackOff 5 8m
- jenkins-x-monocular-prerender-5848c74fdc-48ppm 1/1 Running 0 8m
- jenkins-x-monocular-ui-c4467bdc5-ttbr6 1/1 Running 0 8m
- jenkins-x-nexus-b7454965d-nvlqb 1/1 Running 0 8m
- pipelinecontroller-6b5b8d9f47-457xx 1/1 Running 0 8m
发现 jenkins-x-MongoDB 和 jenkins-x-monocular-API 组件启动异常, 这是因为 jenkins-x-monocular-API 依赖 jenkins-x-MongoDB, 而 jenkins-x-MongoDB 在创建 pvc 资源时找不到 default storage class 而导致的; 编辑 MongoDB-pvc.YAML 创建新 pvc:
- # cat MongoDB-pvc.YAML
- kind: PersistentVolumeClaim
- apiVersion: v1
- metadata:
- name: jenkins-x-MongoDB
- namespace: jx
- spec:
- accessModes:
- - ReadWriteOnce
- storageClassName: alicloud-disk-available
- resources:
- requests:
- storage: 20Gi
- # kubectl get pvc -n jx
- NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
- jenkins Bound d-j6c8mnao06oovpk0vy4h 30Gi RWO alicloud-disk-available 18m
- jenkins-x-chartmuseum Bound d-j6c9szfy8smf4ak05hm9 20Gi RWO alicloud-disk-available 18m
- jenkins-x-docker-registry Bound d-j6cc913ulnzfa7drkru9 100Gi RWO alicloud-disk-available 18m
- jenkins-x-MongoDB Pending 18m
- jenkins-x-nexus Bound d-j6cfrymuj8lrj2pvz3v0 20Gi RWO alicloud-disk-available 18m
- # kubectl delete pvc jenkins-x-MongoDB -n jx
- persistentvolumeclaim "jenkins-x-mongodb" deleted
- # kubectl create -f MongoDB-pvc.YAML
- persistentvolumeclaim/jenkins-x-MongoDB created
- # kubectl delete pods jenkins-x-MongoDB-784f66c466-zz429 -n jx
- pod "jenkins-x-mongodb-784f66c466-zz429" deleted
- # kubectl delete pods jenkins-x-monocular-API-58796c57c9-xk8rs -n jx
- pod "jenkins-x-monocular-api-58796c57c9-xk8rs" deleted
全部组件运行正常后可以看到 jenkins-x-platform 的安装进程进入下一步 jenkins CLI API Token 的配置:
根据提示获取 token 填入后, 安装部署完成:
查看 ingress 暴露出来的服务 url
- # jx get urls
- Name URL
- jenkins http://jenkins.jx.aliyunk8s.com
- jenkins-x-chartmuseum http://chartmuseum.jx.aliyunk8s.com
- jenkins-x-docker-registry http://docker-registry.jx.aliyunk8s.com
- jenkins-x-monocular-API http://monocular.jx.aliyunk8s.com
- jenkins-x-monocular-ui http://monocular.jx.aliyunk8s.com
- nexus http://nexus.jx.aliyunk8s.com
访问 http://jenkins.jx.aliyunk8s.com/ :
访问 http://monocular.jx.aliyunk8s.com/ :
访问 http://nexus.jx.aliyunk8s.com/ :
docker-registry 服务的访问有问题(暂时未花过多时间调试), 但我们会在下一篇中演示如何让 jenkins x 使用阿里云容器镜像服务来管理容器镜像; 下一篇文章也会使用 jenkins x 创建一个 spring 应用并演示如何使用 GitOps 的理念管理和发布一个云原生应用.
来源: https://yq.aliyun.com/articles/657149