【K8S】基於Docker+K8S+GitLab/SVN+Jenkins+Harbor搭建持續整合交付環境(環境搭建篇)
阿新 • • 發佈:2020-05-22
## 寫在前面
> 最近在 K8S 1.18.2 版本的叢集上搭建DevOps環境,期間遇到了各種坑。目前,搭建環境的過程中出現的各種坑均已被填平,特此記錄,並分享給大家!
## 伺服器規劃
| IP | 主機名 | 節點 | 作業系統 |
| --------------- | --------- | ---------- | --------------- |
| 192.168.175.101 | binghe101 | K8S Master | CentOS 8.0.1905 |
| 192.168.175.102 | binghe102 | K8S Worker | CentOS 8.0.1905 |
| 192.168.175.103 | binghe103 | K8S Worker | CentOS 8.0.1905 |
## 安裝環境版本
| 軟體名稱 | 軟體版本 | 說明 |
| -------------- | --------- | ------------------------------------------------------------ |
| Docker | 19.03.8 | 提供容器環境 |
| docker-compose | 1.25.5 | 定義和執行由多個容器組成的應用 |
| K8S | 1.8.12 | 是一個開源的,用於管理雲平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單並且高效(powerful),Kubernetes提供了應用部署,規劃,更新,維護的一種機制。 |
| GitLab | 12.1.6 | 程式碼倉庫(與SVN安裝一個即可) |
| Harbor | 1.10.2 | 私有映象倉庫 |
| Jenkins | 2.89.3 | 持續整合交付 |
| SVN | 1.10.2 | 程式碼倉庫(與GitLab安裝一個即可) |
| JDK | 1.8.0_202 | Java執行基礎環境 |
| maven | 3.6.3 | 構建專案的基礎外掛 |
## 伺服器免密碼登入
在各伺服器執行如下命令。
```bash
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
```
將binghe102和binghe103伺服器上的id_rsa.pub檔案複製到binghe101伺服器。
```bash
[root@binghe102 ~]# scp .ssh/id_rsa.pub binghe101:/root/.ssh/102
[root@binghe103 ~]# scp .ssh/id_rsa.pub binghe101:/root/.ssh/103
```
在binghe101伺服器上執行如下命令。
```bash
cat ~/.ssh/102 >> ~/.ssh/authorized_keys
cat ~/.ssh/103 >> ~/.ssh/authorized_keys
```
然後將authorized_keys檔案分別複製到binghe102、binghe103伺服器。
```bash
[root@binghe101 ~]# scp .ssh/authorized_keys binghe102:/root/.ssh/authorized_keys
[root@binghe101 ~]# scp .ssh/authorized_keys binghe103:/root/.ssh/authorized_keys
```
刪除binghe101節點上~/.ssh下的102和103檔案。
```bash
rm ~/.ssh/102
rm ~/.ssh/103
```
## 安裝JDK
需要在每臺伺服器上安裝JDK環境。到Oracle官方下載JDK,我這裡下的JDK版本為1.8.0_202,下載後解壓並配置系統環境變數。
```bash
tar -zxvf jdk1.8.0_212.tar.gz
mv jdk1.8.0_212 /usr/local
```
接下來,配置系統環境變數。
```bash
vim /etc/profile
```
配置項內容如下所示。
```bash
JAVA_HOME=/usr/local/jdk1.8.0_212
CLASS_PATH=.:$JAVA_HOME/lib
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASS_PATH PATH
```
接下來執行如下命令使系統環境變數生效。
```bash
source /etc/profile
```
## 安裝Maven
到Apache官方下載Maven,我這裡下載的Maven版本為3.6.3。下載後直接解壓並配置系統環境變數。
```bash
tar -zxvf apache-maven-3.6.3-bin.tar.gz
mv apache-maven-3.6.3-bin /usr/local
```
接下來,就是配置系統環境變數。
```bash
vim /etc/profile
```
配置項內容如下所示。
```bash
JAVA_HOME=/usr/local/jdk1.8.0_212
MAVEN_HOME=/usr/local/apache-maven-3.6.3-bin
CLASS_PATH=.:$JAVA_HOME/lib
PATH=$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASS_PATH MAVEN_HOME PATH
```
接下來執行如下命令使系統環境變數生效。
```bash
source /etc/profile
```
接下來,修改Maven的配置檔案,如下所示。
```xml
```
將Maven下載的Jar包儲存到/home/repository目錄下。
## 安裝Docker環境
**本文件基於Docker 19.03.8 版本搭建Docker環境。**
在所有伺服器上建立install_docker.sh指令碼,指令碼內容如下所示。
```bash
export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com
dnf install yum*
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
dnf install https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.13-3.1.el7.x86_64.rpm
yum install -y docker-ce-19.03.8 docker-ce-cli-19.03.8
systemctl enable docker.service
systemctl start docker.service
docker version
```
在每臺伺服器上為install_docker.sh指令碼賦予可執行許可權,並執行指令碼即可。
## 安裝docker-compose
**注意:在每臺伺服器上安裝docker-compose**
**1.下載docker-compose檔案**
```bash
curl -L https://github.com/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
```
### 2.為docker-compose檔案賦予可執行許可權
```bash
chmod a+x /usr/local/bin/docker-compose
```
### 3.檢視docker-compose版本
```bash
[root@binghe ~]# docker-compose version
docker-compose version 1.25.5, build 8a1c60f6
docker-py version: 4.1.0
CPython version: 3.7.5
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
```
## 安裝K8S叢集環境
**本文件基於K8S 1.8.12版本來搭建K8S叢集**
### 安裝K8S基礎環境
在所有伺服器上建立install_k8s.sh指令碼檔案,指令碼檔案的內容如下所示。
```bash
#配置阿里雲映象加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://zz3sblpi.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
#安裝nfs-utils
yum install -y nfs-utils
yum install -y wget
#啟動nfs-server
systemctl start nfs-server
systemctl enable nfs-server
#關閉防火牆
systemctl stop firewalld
systemctl disable firewalld
#關閉SeLinux
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# 關閉 swap
swapoff -a
yes | cp /etc/fstab /etc/fstab_bak
cat /etc/fstab_bak |grep -v swap > /etc/fstab
#修改 /etc/sysctl.conf
# 如果有配置,則修改
sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g" /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g" /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g" /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.all.disable_ipv6.*#net.ipv6.conf.all.disable_ipv6=1#g" /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.default.disable_ipv6.*#net.ipv6.conf.default.disable_ipv6=1#g" /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.lo.disable_ipv6.*#net.ipv6.conf.lo.disable_ipv6=1#g" /etc/sysctl.conf
sed -i "s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g" /etc/sysctl.conf
# 可能沒有,追加
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
# 執行命令以應用
sysctl -p
# 配置K8S的yum源