因为自己对cicd比较感兴趣,前段时间刚好看到网易云开源了一个CD平台Horizon, 试着跑一下
安装Docker
- 如果以前有安装过docker, 需要移除跟docker相关的依赖
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 安装
yum-utils
和设置yum源
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
- 安装docker
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- 运行并设置开机启动
// 运行
sudo systemctl start docker
// 设置开机启动
sudo systemctl enable docker
安装kubectl
- 通过命令行, 下载最新版本的kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
- 下载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
- 可通过
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
查看是否安装成功
安装好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
查看集群是否安装成功
因为集群中的节点默认不能解析域名,所以需要执行以下命令
⎈ |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的步骤
- 根据Kubernetes的版本,安装响应的helm版本。因为上面安装的kubernetes版本是
v1.19.6
,所以这里选择helm的版本是3.6.0
- 解压
tar -xzvf helm-v3.6.0-linux-amd64.tar.gz
- 在解压目中找到
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
文件的镜像仓库
然后执行
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是否正常运行
安装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即可找到对应的镜像
然后通过
kubectl edit
替换相应的镜像即可
例如kubectl edit deploy tekton-pipelines-webhook -n horizoncd
在本机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的登录页面
参考链接
- Docker官网:docs.docker.com/engine/inst…
- kind官网:kind.sigs.k8s.io/
- Horizon安装教程:horizoncd.github.io/docs/tutori…
- Helm官方文档:helm.sh/zh/docs/int…