jenkins X实践系列(3) —— jenkins X 安装拾遗

jx是云原生CICD,devops的一个最佳实践之一,目前在快速的发展成熟中。最近调研了JX,这里为第3篇,介绍下如何安装jenkins x。

前置条件#

  • 安装K8S
  • 安装ceph集群(jx需要storage class创建pv)
  • 申请一个域名(可选),可以修改hosts实现
  • helm
  • git私服

安装ceph集群#

这里的服务器为centos 7。

使用官方的ceph-deploy安装即可,先安装ceph-deploy,然后每台机器安装运行环境

Copy
pip install ceph-deploy export CEPH_DEPLOY_REPO_URL=http://mirrors.ustc.edu.cn/ceph/rpm-jewel/el7 export CEPH_DEPLOY_GPG_URL=http://mirrors.ustc.edu.cn/ceph/keys/release.asc ceph-deploy install docker86-156 docker86-155 docker86-154

然后安装集群

Copy
ceph-deploy new docker86-156 docker86-155 docker86-154

修改配置文件

Copy
cat <<EOF >>ceph.conf #osd_journal_size = 10000 public network = 192.168.86.0/24 osd_pool_default_size = 2 osd_pool_default_min_size = 1 osd_crush_chooseleaf_type = 1 osd_crush_update_on_start = true max_open_files = 131072 osd pool default pg num = 128 osd pool default pgp num = 128 mon_pg_warn_max_per_osd = 0 mon clock drift allowed = 2 mon clock drift warn backoff = 30 mon_pg_warn_max_per_osd = 300 EOF

分发配置文件:

Copy
ceph-deploy --overwrite-conf config push docker86-155 docker86-154 docker86-156

安装服务

Copy
ceph-deploy mon create-initial ceph-deploy admin docker86-156 docker86-155 docker86-154

安装osd

Copy
ceph-deploy disk zap docker86-156:sdb docker86-155:sdb docker86-154:sdb ceph-deploy osd prepare docker86-156:sdb docker86-155:sdb docker86-154:sdb ceph-deploy osd activate docker86-156:sdb1 docker86-154:sdb1

添加pool#

Copy
ceph osd pool create k8smeta 128 ceph osd pool create k8sdata 128 ceph fs new k8s k8smeta k8sdata ceph osd pool ls detail

K8S使用ceph#

生成 Ceph secret

Copy
grep key /etc/ceph/ceph.client.admin.keyring |awk '{printf "%s", $NF}'|base64

假如得到: $SECRET==

在k8s创建Secret

Copy
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Secret metadata: name: ceph-secret namespace: default type: "kubernetes.io/rbd" data: key: $SECRET== EOF

创建StorageClass

Copy
cat <<EOF | kubectl apply -f - apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ceph-web provisioner: kubernetes.io/rbd parameters: monitors: 192.168.86.156,192.168.86.155,192.168.86.154 adminId: admin adminSecretName: ceph-secret adminSecretNamespace: default pool: rbd userId: admin userSecretName: ceph-secret EOF

可以将ceph设为默认的storage class:

Copy
kubectl patch storageclass ceph-web -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

安装git私服gitea(可选)#

如果已经有git的,或者直接使用GitHub的跳过。

创建PV:

Copy
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: PersistentVolume metadata: name: cephfs-github-pv namespace: gitea labels: name: cephfs-github-pv spec: capacity: storage: 200Gi accessModes: - ReadWriteMany cephfs: monitors: - 192.168.86.156:6789 path: /github user: admin secretRef: name: ceph-secret readOnly: false persistentVolumeReclaimPolicy: Retain EOF

PVC

Copy
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: cephfs-github-pvc namespace: gitea spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 200Gi selector: matchLabels: name: cephfs-github-pv EOF

gitea部署:

Copy
cat <<EOF | kubectl apply -f - apiVersion: extensions/v1beta1 kind: Deployment metadata: name: giteamysql namespace: gitea spec: strategy: type: Recreate template: metadata: labels: app: giteamysql spec: containers: - image: gitea/gitea:latest imagePullPolicy: IfNotPresent name: gitea resources: {} volumeMounts: - name: ceph mountPath: /data volumes: - name: ceph persistentVolumeClaim: claimName: cephfs-github-pvc EOF

创建服务:

Copy
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Service metadata: name: giteamysql-service namespace: gitea labels: app: charts spec: ports: - port: 80 targetPort: 3000 selector: app: giteamysql type: NodePort EOF

创建ingress

Copy
cat <<EOF | kubectl apply -f - apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/proxy-body-size: "0" nginx.ingress.kubernetes.io/proxy-read-timeout: "600" nginx.ingress.kubernetes.io/proxy-send-timeout: "600" kubernetes.io/tls-acme: 'true' name: giteamysql-ingress namespace: gitea spec: rules: - host: github.youdomain.com http: paths: - backend: serviceName: giteamysql-service servicePort: 80 path: / EOF

一切正常的话,打开github.youdomain.com,按提示进行安装,设置管理员密码即可。

安装好后创建一个token, $git_access_token

域名与tls#

将域名的通配符,a记录到k8s集群。

申请TLS证书,使用certbot

Copy
$ yum -y install yum-utils $ yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional $ sudo yum install certbot

然后申请

Copy
certbot certonly --manual -d *.domain.com --email youmail@domain.com

这个会要求创建一个A记录,按提示创建即可。

一些OK的话,服务器/etc/letsencrypt/live/domain.com/ 会生成tls证书。

Copy
$ ll /etc/letsencrypt/live/iflyresearch.com/ total 4 lrwxrwxrwx. 1 root root 40 Oct 17 15:11 cert.pem -> ../../archive/iflyresearch.com/cert1.pem drwxr-xr-x 2 root root 78 Nov 14 09:33 certs lrwxrwxrwx. 1 root root 41 Oct 17 15:11 chain.pem -> ../../archive/iflyresearch.com/chain1.pem lrwxrwxrwx. 1 root root 45 Oct 17 15:11 fullchain.pem -> ../../archive/iflyresearch.com/fullchain1.pem lrwxrwxrwx. 1 root root 43 Oct 17 15:11 privkey.pem -> ../../archive/iflyresearch.com/privkey1.pem

要在k8s使用,需要创建secret:

Copy
kubectl create secret tls research-tls-secret --cert=cert.pem --key=./privkey.pem -n=kube-system

安装helm#

jx依赖helm,需要先安装,可以参见本系列第一篇

安装jenkins X#

先创建一个namespace:incubation

写入 ceph-secret:

Copy
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Secret metadata: name: ceph-secret namespace: incubation type: "kubernetes.io/rbd" data: key: $SECRET== EOF

下载jx执行文件:

Copy
wget https://github.com/jenkins-x/jx/releases/download/v1.3.380/jx-linux-amd64.tar.gz tar xzv jx-linux-amd64.tar.gz -C ~/.jx/bin export PATH=$PATH:~/.jx/bin echo 'export PATH=$PATH:~/.jx/bin' >> ~/.bashrc

然后执行安装命令:

Copy
jx install --external-ip=192.168.86.214 --namespace='incubation' --git-provider-url='http://github.iflyresearch.com' --git-username='jqpeng' --git-api-token=' $git_access_token' --domain='iflyresearch.com' --provider=kubernetes
  • $git_access_token 替换为你的token
  • external-ip 填写k8s的虚拟ip

然后按提示,输出jenkins等access_token等参数。

注意:

enter description here


作者:Jadepeng
出处:jqpeng的技术记事本--http://www.cnblogs.com/xiaoqi
您的支持是对博主最大的鼓励,感谢您的认真阅读。
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

关注作者

欢迎关注作者微信公众号, 一起交流软件开发:欢迎关注作者微信公众号

posted @   JadePeng  阅读(3458)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示
CONTENTS