开发者
资源
鲲鹏服务器上部署k8s+gitlab
鲲鹏服务器上部署k8s+gitlab
发表于2023/08/21
2310

一、GitLab介绍

GitLab是由GitLabInc.开发,使用MIT许可证的基于网络的Git仓库管理工具,且具有wiki和issue跟踪功能。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。

二、环境信息

OS:CentOS7.6/openEuler20.03-LTS-SP1

软件:docker-18.09.0,k8s-1.18.20

三、部署指南

K8s需准备一个master节点和若干个worker节点,我们以1个master节点和1个worker节点为例。

1,基础环境准备

在所有节点执行以下命令,添加k8s的repo源:

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.huaweicloud.com/kubernetes/yum/repos/kubernetes-el7-aarch64/
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://mirrors.huaweicloud.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.huaweicloud.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

执行以下命令刷新yum缓存:

yum makecache

执行以下命令关闭防火墙:

systemctl stop firewalld && systemctl disable firewalld

执行以下命令关闭selinux:

setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

执行以下命令开启ipv4转发:

sysctl -w net.ipv4.ip_forward=1

执行以下命令禁用交换分区:

swapoff -a #还需要在/etc/fstab中设置永久关闭交换分区,否则服务器重启后会导致k8s服务无法启动

执行以下命令修改系统配置:

cat <<EOF | tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

在/etc/hosts文件中添加以下内容(ip请根据实际节点的ip来修改):

10.0.0.1 master
10.0.0.2 worker1
...

2,安装docker

执行以下命令安装docker:

yum install -y docker

执行以下命令查看docker版本信息:

docker version

如果是在内网环境,访问互联网需要设置代理的情况,则需要为docker配置代理,否则镜像无法下载。执行以下命令可以为docker配置代理:

mkdir -p /etc/systemd/system/docker.service.d
cat > /etc/systemd/system/docker.service.d/proxy.conf <<EOF
[Service]
Environment="http_proxy=http://<user>:<pass>@<host_ip>:<port>"
Environment="https_proxy=http://<user>:<pass>@<host_ip>:<port>"
Environment="no_proxy=localhost,.local,127.0.0.1,master"
EOF

3,安装k8s组件

以下命令在所有节点执行。

执行以下命令安装k8s相关组件:

yum install -y kubelet-1.18.20 kubeadm-1.18.20 kubectl-1.18.20 kubernetes-cni-0.8.7

执行以下命令设置服务开机启动:

systemctl enable kubelet

执行以下命令下载相关镜像:

docker pull k8smx/kube-apiserver:v1.18.20
docker pull k8smx/kube-controller-manager:v1.18.20
docker pull k8smx/kube-scheduler:v1.18.20
docker pull k8smx/kube-proxy:v1.18.20
docker pull k8smx/pause:3.2
docker pull k8smx/coredns:1.6.7
docker pull k8smx/etcd:3.4.3-0

执行以下命令修改镜像标签:

docker tag k8smx/kube-proxy:v1.18.20 k8s.gcr.io/kube-proxy:v1.18.20
docker tag k8smx/kube-controller-manager:v1.18.20 k8s.gcr.io/kube-controller-manager:v1.18.20
docker tag k8smx/kube-apiserver:v1.18.20 k8s.gcr.io/kube-apiserver:v1.18.20
docker tag k8smx/kube-scheduler:v1.18.20 k8s.gcr.io/kube-scheduler:v1.18.20
docker tag k8smx/pause:3.2 k8s.gcr.io/pause:3.2
docker tag k8smx/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7
docker tag k8smx/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0

执行以下命令删除旧镜像:

docker rmi k8smx/kube-proxy:v1.18.20
docker rmi k8smx/kube-controller-manager:v1.18.20
docker rmi k8smx/kube-apiserver:v1.18.20
docker rmi k8smx/kube-scheduler:v1.18.20
docker rmi k8smx/pause:3.2
docker rmi k8smx/coredns:1.6.7
docker rmi k8smx/etcd:3.4.3-0

4,k8s集群部署

在master节点,执行以下命令初始化集群:

kubeadm init --pod-network-cidr=10.244.0.0/16

初始化成功后会有对应的提示信息,在最后还有将worker节点加入集群的命令。 在master节点执行以下命令配置集群:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf

在master节点查看集群节点信息:

kubectl get node

在所有计算节点执行以下命令,将计算节点加入集群(token值需根据实际情况修改):

kubeadm join <master_ip>:6443 --token a9020j.vnfgqk7n30p5d9z0 --discovery-token-ca-cert-hash sha256: c465651177b41c545fe20f8dc052b9661a8375afdeac7e7ecf52029fc66a506a

加入集群后可以在master节点使用kubectl get node命令查看集群节点信息。 在master节点,执行以下命令安装calico网络插件(也可以安装其他网络差距,如flannel和cilium):

wget https://docs.projectcalico.org/v3.14/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
kubectl apply -f calico.yaml

在master节点执行以下命令,查看相关pod的状态,所有pod状态为running时表示集群已正常就绪:

kubectl get pod -n kube-system

如果有pod的状态不为running,需排查该pod状态异常的原因,可以使用命令kubectl describe pod -n kube-system来进行查看。

5,部署redis

在master节点创建gitlab-redis.yaml文件并添加以下内容:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  namespace: default
spec:
  selector:
    matchLabels:
      name: redis
  template:
    metadata:
      labels:
        name: redis
    spec:
      containers:
      - name: redis
        image: redis
        imagePullPolicy: IfNotPresent
        ports:
        - name: redis
          containerPort: 6379
        volumeMounts:
        - mountPath: /var/lib/redis
          name: data
        livenessProbe:
          exec:
            command:
            - redis-cli
            - ping
          initialDelaySeconds: 30
          timeoutSeconds: 5
        readinessProbe:
          exec:
            command:
            - redis-cli
            - ping
          initialDelaySeconds: 5
          timeoutSeconds: 1
      volumes:
      - name: data
        emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
  name: redis
  namespace: default
  labels:
    name: redis
spec:
  ports:
    - name: redis
      port: 6379
      targetPort: redis
  selector:
    name: redis

执行以下命令创建reids的pod:

kubectl apply -f gitlab-redis.yaml

执行以下命令观察该pod状态,确保redis的pod状态为running:

kubectl get pod -A

6,部署postgresql

在master节点创建gitlab-pgsql.yaml文件并添加以下内容:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgresql
  namespace: default
  labels:
    name: postgresql
spec:
  selector:
    matchLabels:
      name: postgresql
  template:
    metadata:
      name: postgresql
      labels:
        name: postgresql
    spec:
      containers:
      - name: postgresql
        image: postgres:13.6
        imagePullPolicy: IfNotPresent
        env:
        - name: POSTGRES_HOST_AUTH_METHOD
          value: trust
        - name: DB_USER
          value: gitlab
        - name: DB_PASS
          value: passw0rd
        - name: DB_NAME
          value: gitlab_production
        - name: DB_EXTENSION
          value: pg_trgm
        ports:
        - name: postgres
          containerPort: 5432
        volumeMounts:
        - mountPath: /var/lib/postgresql
          name: data
        livenessProbe:
          exec:
            command:
            - pg_isready
            - -h
            - localhost
            - -U
            - postgres
          initialDelaySeconds: 30
          timeoutSeconds: 5
        readinessProbe:
          exec:
            command:
            - pg_isready
            - -h
            - localhost
            - -U
            - postgres
          initialDelaySeconds: 5
          timeoutSeconds: 1
      volumes:
      - name: data
        emptyDir: {}

---
apiVersion: v1
kind: Service
metadata:
  name: postgresql
  namespace: default
  labels:
    name: postgresql
spec:
  ports:
    - name: postgres
      port: 5432
      targetPort: postgres
  selector:
    name: postgresql

执行以下命令创建postgresql的pod:

kubectl apply -f gitlab-pgsql.yaml

执行以下命令观察该pod状态,确保redis的pod状态为running:

kubectl get pod -A

7,部署gitlab

在master节点创建gitlab.yaml并添加以下内容:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: gitlab
  namespace: default
  labels:
    name: gitlab
spec:
  selector:
    matchLabels:
      name: gitlab
  template:
    metadata:
      name: gitlab
      labels:
        name: gitlab
    spec:
      containers:
      - name: gitlab
        image: yrzr/gitlab-ce-arm64v8:latest
        imagePullPolicy: IfNotPresent
        env:
        - name: TZ
          value: Asia/Shanghai
        - name: GITLAB_TIMEZONE
          value: Beijing
        - name: GITLAB_SECRETS_DB_KEY_BASE
          value: long-and-random-alpha-numeric-string
        - name: GITLAB_SECRETS_SECRET_KEY_BASE
          value: long-and-random-alpha-numeric-string
        - name: GITLAB_SECRETS_OTP_KEY_BASE
          value: long-and-random-alpha-numeric-string
        - name: GITLAB_ROOT_PASSWORD
          value: root
        - name: GITLAB_ROOT_EMAIL
          value: 123123@qq.com
        - name: GITLAB_HOST
          value: git.qikqiak.com
        - name: GITLAB_PORT
          value: "80"
        - name: GITLAB_SSH_PORT
          value: "22"
        - name: GITLAB_NOTIFY_ON_BROKEN_BUILDS
          value: "true"
        - name: GITLAB_NOTIFY_PUSHER
          value: "false"
        - name: GITLAB_BACKUP_SCHEDULE
          value: daily
        - name: GITLAB_BACKUP_TIME
          value: 01:00
        - name: DB_TYPE
          value: postgres
        - name: DB_HOST
          value: postgresql
        - name: DB_PORT
          value: "5432"
        - name: DB_USER
          value: gitlab
        - name: DB_PASS
          value: passw0rd
        - name: DB_NAME
          value: gitlab_production
        - name: REDIS_HOST
          value: redis
        - name: REDIS_PORT
          value: "6379"
        ports:
        - name: http
          containerPort: 80
        - name: ssh
          containerPort: 22
        volumeMounts:
        - mountPath: /home/git/data
          name: data
        livenessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 180
          timeoutSeconds: 5
        readinessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 5
          timeoutSeconds: 1
      volumes:
      - name: data
        emptyDir: {}

---
apiVersion: v1
kind: Service
metadata:
  name: gitlab
  namespace: default
  labels:
    name: gitlab
spec:
  ports:
    - name: http
      port: 80
      targetPort: http
      nodePort: 30852
    - name: ssh
      port: 22
      nodePort: 32353
      targetPort: ssh
  selector:
    name: gitlab
  type: NodePort

执行以下命令创建gitlab的pod:

kubectl apply -f gitlab.yaml

执行以下命令观察该pod状态,确保redis的pod状态为running:

kubectl get pod -A

打开浏览器,访问链接&quot;http://:30852&quot;即可访问gitlab登录页(默认超级用户名为root,密码在yaml中已设置为root)。 至此k8s+gitlab的环境就部署完成了。

收藏举报
Level 1
0
帖子
0
粉丝
0
获赞