搭建CICD平台 - Horizon笔记

444 阅读3分钟

因为自己对cicd比较感兴趣,前段时间刚好看到网易云开源了一个CD平台Horizon, 试着跑一下

安装Docker

  1. 如果以前有安装过docker, 需要移除跟docker相关的依赖
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
  1. 安装yum-utils和设置yum源
sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
  1. 安装docker
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. 运行并设置开机启动
// 运行
sudo systemctl start docker

// 设置开机启动
sudo systemctl enable docker

安装kubectl

  1. 通过命令行, 下载最新版本的kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
  1. 下载kubectl checksum文件
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"

检查kubectl二进制文件是否正确

echo "$(cat kubectl.sha256) kubectl" | sha256sum --check

如果正确,将输出kubectl: OK 3. 安装Kubectl

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
  1. 可通过kubectl version --client查看是否安装成功

使用kind搭建Kubernetes环境

首先使用使用kind搭建Kubernetes环境,这里使用的是Centos系统,因此可以使用下面的命令安装kind

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.17.0/kind-linux-amd64

chmod +x ./kind

sudo mv ./kind /usr/local/bin/kind

通过kind --help查看是否安装成功 image.png 安装好kind之后,按照horizon官方给的kubernetes集群配置文件kind.yaml, 在命令行中执行

cat <<EOF > kind.yaml  
kind: Cluster  
apiVersion: kind.x-k8s.io/v1alpha4  
nodes:  
- role: control-plane  
kubeadmConfigPatches:  
- |  
kind: InitConfiguration  
nodeRegistration:  
kubeletExtraArgs:  
node-labels: "ingress-ready=true"  
extraPortMappings:  
- containerPort: 80  
hostPort: 80  
protocol: TCP  
- containerPort: 443  
hostPort: 443  
protocol: TCP  
EOF

可以通过kubectl get nodes查看集群是否安装成功

image.png

因为集群中的节点默认不能解析域名,所以需要执行以下命令

⎈ |kind-kind:horizoncd)➜  ~ docker ps
CONTAINER ID   IMAGE                   COMMAND                  CREATED      STATUS       PORTS                                                                 NAMES
a9902c293760   kindest/node:v1.19.16   "/usr/local/bin/entr…"   3 days ago   Up 6 hours   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 127.0.0.1:53586->6443/tcp   kind-control-plane
(⎈ |kind-kind:horizoncd)➜  ~ docker exec -it a9902c293760 bash
root@kind-control-plane:/# echo "nameserver `kubectl get service -n kube-system kube-dns -o jsonpath='{.spec.clusterIP}'`" >> /etc/resolv.conf

// 通过horizon安装的harbor存在证书问题,需要执行以下命令
root@kind-control-plane:/# echo '[plugins."io.containerd.grpc.v1.cri".registry.configs."harbor.horizoncd.svc.cluster.local".tls]  
insecure_skip_verify = true' >> /etc/containerd/config.toml  
root@kind-control-plane:/# systemctl restart containerd

安装Helm

Helm是Kubernetes的包管理工具,相当于nodejs里面的npm, python的pip。下面是安装helm的步骤

  1. 根据Kubernetes的版本,安装响应的helm版本。因为上面安装的kubernetes版本是v1.19.6,所以这里选择helm的版本是3.6.0

image.png

  1. 解压
tar -xzvf helm-v3.6.0-linux-amd64.tar.gz
  1. 在解压目中找到helm程序,移动到需要的目录中(mv linux-amd64/helm /usr/local/bin/helm)

安装ingress-nginx

执行以下命令

helm repo add horizon https://horizoncd.github.io/helm-charts  

因为国内墙的问题,很多镜像都拉不下来,所以通过手动拉取的方式获取ingress-nginx的chart包

helm pull ingress-nginx/ingress-nginx --version 2.1.0

然后进入到ingress-nginx目录手动改values.yaml文件的镜像仓库

image.png

image.png

然后执行

helm install my-ingress-nginx -n ingress-nginx ingress-nginx/ --set controller.hostNetwork=true --set controller.watchIngressWithoutClass=true --create-namespace

通过kubectl get pod -n ingress-nginx查看Pod是否正常运行

image.png

安装Horizon

通过以下命令安装horizon

helm repo add horizon https://horizoncd.github.io/helm-charts
helm install horizon horizon/horizon -n horizoncd --version 2.1.0 --create-namespace

和安装ingress-nginx遇到同样的问题:很多镜像都安装不成功,这里采用别人上传的镜像替代。在DockerHub中,输入tekton即可找到对应的镜像

image.png 然后通过kubectl edit替换相应的镜像即可 例如kubectl edit deploy tekton-pipelines-webhook -n horizoncd

image.png

在本机host文件中,写入域名映射, 例如

192.168.2.132 horizon.h8r.site
192.168.2.132 harbor.horizoncd.svc.cluster.local
192.168.2.132 grafana.h8r.site

如果所有的pod都能正常运行的化,通过访问horizon.h8r.site, 即可出现horizoncd的登录页面

image.png

image.png

参考链接