Kubernetes CI/CD 入门指南

2020-02-29  本文已影响0人  香菜香菜我是折耳根

一、安装 Docker

sudo yum install -y yum-utils  device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io

将 Docker 设置为开机自启动服务,先不要启动:

sudo systemctl enable docker

执行 docker version 测试,可能会出现以下提示:

[vagrant@localhost ~]$ docker version
Client: Docker Engine - Community
 Version:           19.03.6
 API version:       1.40
 Go version:        go1.12.16
 Git commit:        369ce74a3c
 Built:             Thu Feb 13 01:29:29 2020
 OS/Arch:           linux/amd64
 Experimental:      false
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

再执行 docker version 测试,Docker 安装成功。

Docker 镜像源登录
docker login [<Mirror URL>]

二、安装 GitLab

这里采用 GitLab Omnibus Docker 安装方式。Omnibus 的意思是将 GitLab 及其它所依赖的 PostgreSQL、Redis、Sidekiq 作为一个整体镜像打包,在实际应用中,可以使用 Docker Compose 或 Kubernetes 将 GitLab 依赖的服务单独部署,以增强可靠性和性能。

首先下载 GitLab 镜像,可以先看我之前写的文章《Docker & Kubernetes 小抄》,配置 Docker 国内镜像源:

:GitLab 版本可自行更新,注意保持跟下面的 GitLab Runner 保持一致,至少是小版本一致。

docker pull gitlab/gitlab-ce:12.7.2-ce.0
mkdir -p /srv/gitlab/{config,logs,data}
sudo docker run --detach \
    --hostname gitlab.example.com \
    --publish 443:443 --publish 80:80 --publish 2222:22 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:12.7.2-ce.0
[vagrant@localhost ~]$ docker ps
CONTAINER ID        IMAGE                          COMMAND             CREATED             STATUS                           PORTS                                                            NAMES
c5689c76f4ca        gitlab/gitlab-ce:12.7.2-ce.0   "/assets/wrapper"   2 seconds ago       Up 1 second (health: starting)   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:2222->22/tcp   gitlab

关注上述 STATUS 一栏,刚启动时为 health: starting,需要等待一段时间,直到 healthy

docker exec -it gitlab bash
vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
  ## GitLab settings
  gitlab:
    ## Web server settings (note: host is the FQDN, do not include http://)
    host: gitlab.example.com
    port: 80
    https: false

实际上,gitlab.example.com 是不存在的虚拟地址,需要在 /etc/hosts 添加对应的 DNS 解析规则,第一列是内网地址:

192.168.33.10 gitlab.example.com

保存修改后退出,重启 GitLab 容器:

docker stop gitlab
docker start gitlab

浏览器访问 http://gitlab.example.com ,默认管理员账号为 root ,第一次登陆需要设置密码。

GitLab Docker SSH 登录问题

虽然安装成功了,但是目前登录后往用户里加入 SSH Keys ,执行 git clone 会报权限错误,这是因为端口映射的问题:

docker exec -it gitlab bash
sudo vi /srv/gitlab/config/gitlab.rb

修改 gitlab_rails['gitlab_shell_ssh_port']

gitlab_rails['gitlab_shell_ssh_port'] = 2222

如果需要对外网开放,防火墙需要打开对应的 2222 端口。

GitLab 内存消耗过大问题

GitLab 默认情况下运行会非常消耗内存,需要修改一些默认的配置参数。

docker exec -it gitlab bash
vi /etc/gitlab/gitlab.rb

unicorn['worker_processes'] 是用来提高服务器的响应速度,默认情况下是(服务器的核心数 * 2 + 1) ,这个参数最小值是 2 :

unicorn['worker_processes'] = 2

适当缩小 Unicorn Worker 的内存使用范围:

unicorn['worker_memory_limit_min'] = "200 * 1 << 20" # 从 1024 MB 改为 200 MB
unicorn['worker_memory_limit_max'] = "300 * 1 << 20" # 从 1280 MB 改为 300 MB

postgresql['shared_buffers'] 是数据库缓存大小,适当减小,推荐为总内存大小的 1/4 。

postgresql['shared_buffers'] = "256MB"

postgresql['max_worker_processes'] 是数据库并发数,可以适当减小:

postgresql['max_worker_processes'] = 8

sidekiq['concurrency'] 是 Sidekiq 并发数,默认是 25 :

sidekiq['concurrency'] = 1

三、安装 GitLab Runner

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
sudo yum install gitlab-runner

浏览器访问 http://gitlab.example.com/admin/runners ,阅读 Set up a shared Runner manually 部分。

gitlab-runner register

主要需要填的三个字段 gitlab-ci coordinator URLgitlab-ci tokenexecutor ,其他的字段可以不填:

usermod -a -G wheel gitlab-runner

四、安装 Kubectl

本地开发环境下,可以很容易地做到 GitLab 服务器和 Kubernetes Master 之间的互信,但是实际环境中是不允许的,因此需要在 GitLab 服务器上使用 kubectl 添加相应的密钥访问:

curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl version
The connection to the server localhost:8080 was refused - did you specify the right host or port?

创建 ~/.kube/config ,填入 Kubernetes Master 上 ~/.kube~/.kube/config 的内容,或直接将 Kubernetes Master 上的 ~/.kube 整个文件夹复制到本地的 $HOME 目录下。

五、实际项目

sudo yum install maven

为了加快 Maven 的依赖下载速度,添加国内镜像源,修改 /etc/maven/settings.xml ,在 <mirrors> 内填入:

<mirror>
    <id>alimaven</id>
    <mirrorOf>central</mirrorOf>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
上一篇下一篇

猜你喜欢

热点阅读