K8S发布系统-基础服务部署

kubeasz

kubeasz是使用Ansible脚本安装K8S集群,介绍组件交互原理,方便直接,不受国内网络环境影响。项目地址:https://github.com/easzlab/kubeasz

规划部署

节点IP 角色 描述

172.16.220.139

管理节点

运行ansible/easzctl脚本,一般复用master节点

172.16.220.141

Master1/etcd1

高可用集群至少2个master节点

注意etcd集群需要1,3,5,7…奇数个节点,一般复用master节点

172.16.220.142

Master2/etcd2

172.16.220.143

Worker1/etcd3

运行应用负载的节点,可根据需要提升机器配置/增加节点数

172.16.220.144

Worker2

172.16.220.145

Worker3

安装

管理节点上进行操作:

  1. 配置hosts文件:
    vim /etc/hosts
    # Hosts File for Nw-Gitlab
    # System localhost
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    
    # ==== User Defiend Start ====
    # == Members. ==
    172.16.220.138  nw-harbor
    172.16.220.139  nw-gitlab nw-nexus k8s-manager
    172.16.220.140  nw-base
    172.16.220.141  k8s-master1 k8s-etcd1
    172.16.220.142  k8s-master2 k8s-etcd2
    172.16.220.143  k8s-worker1 k8s-etcd3
    172.16.220.144  k8s-worker2
    172.16.220.145  k8s-worker3
    # ==== User Defiend End ====
  2. 下载脚本:
    wget https://github.com/easzlab/kubeasz/releases/download/2.2.1/easzup
    chmod +x easzup
  3. 安装Python、ansible:
    yum install -y python3
    pip3 install pip --upgrade -i https://mirrors.aliyun.com/pypi/simple/
    pip install ansible==2.6.18 netaddr==0.7.19 -i https://mirrors.aliyun.com/pypi/simple/
    ln -s /usr/bin/python3 /usr/bin/python
  4. 配置密钥登陆:
    ssh-keygen -t rsa -b 2048 -N ''
    ssh-copy-id 172.16.220.139
    ssh-copy-id 172.16.220.141
    ssh-copy-id 172.16.220.142
    ssh-copy-id 172.16.220.143
    ssh-copy-id 172.16.220.144
    ssh-copy-id 172.16.220.145
    for ((i=1;i<6;i++));do ssh 172.16.220.14${i} "hostname";done


    如果发现执行过慢,是由于ssh客户端试图反向解析连接过来的IP地址导致,关闭SSH的DNS查询即可(或在所有节点修改hosts文件):

    for ((i=1;i<6;i++));do ssh 172.16.220.14${i} "sed -i 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config";done
    for ((i=1;i<6;i++));do ssh 172.16.220.14${i} "systemctl restart sshd";done

    之后再访问就会快很多。

  5. 使用工具脚本下载k8s组件:
    ./easzup -D

    脚本会下载所有需要的程序包到/etc/ansible/目录下。

  6. 配置群集参数:
    cd /etc/ansible
    cp example/hosts.multi-node hosts
    vim hosts
    ...
    [etcd]
    172.16.220.141 NODE_NAME=k8s-etcd1
    172.16.220.142 NODE_NAME=k8s-etcd2
    172.16.220.143 NODE_NAME=k8s-etcd3
    
    # master node(s)
    [kube-master]
    172.16.220.141
    172.16.220.142
    
    # work node(s)
    [kube-node]
    172.16.220.143
    172.16.220.144
    172.16.220.145
    ...
    [chrony]
    172.16.220.141
    ...

    验证ansible安装:

    ansible all -m ping

  7. 分步安装:
    ansible-playbook 01.prepare.yml
    ansible-playbook 02.etcd.yml
    ansible-playbook 03.docker.yml
    ansible-playbook 04.kube-master.yml
    ansible-playbook 05.kube-node.yml
    ansible-playbook 06.network.yml
    ansible-playbook 07.cluster-addon.yml
  8. 查看状态:
    kubectl get nodes
    kubectl get svc
    kubectl get ns
    kubectl get pods --all-namespaces

Ingress

Ingress是外部访问K8S内服务的接口;创建ingress控制器(这里使用tls traefik-ingress):

带https的Ingress需要一对tls证书密钥:

cd
mkdir dashboard-tls
cd dashboard-tls/
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nw-k8s-db.zongs365.cc"
kubectl -n kube-system create secret tls traefik-cert --key=tls.key --cert=tls.crt
kubectl apply -f /etc/ansible/manifests/ingress/traefik/tls/traefik-controller.yaml
kubectl get svc -n kube-system traefik-ingress-service

可以看到,其在所有节点上自动映射了 23456(ingress80)、23457(ingress 443) 等端口,这些也是应用的yaml文件中定义的:

通过查看节点主机端口可以看到这一改变已生效:

虽然控制器已经创建并监听了端口,但由于前面两个端口还未做后端ingress规则,现在查看不到内容。后面映射到8080的端口是traefik-web-ui界面:

虽说可以直接通过上面端口访问,我们也可以创建traefik-web-ui的ingress规则:

vim /etc/ansible/manifests/ingress/traefik/traefik-ui.ing.yaml
- host: nw-k8s-ins.xxx.cc

修改监听的主机名称(域名)即可。然后应用ingress规则:

kubectl create -f /etc/ansible/manifests/ingress/traefik/traefik-ui.ing.yaml
kubectl get ingress -A

然后就可以通过此域名就可以访问其,由于还未做域名解析,暂改hosts进行访问:

Dashboard-ins规则

配置完ingress控制器后,就可以添加dashboard规则来访问。

默认dashboard已安装,可通过下面命令确认:

kubectl get svc -n kube-system | grep dashboard

修改规则:

vim /etc/ansible/manifests/ingress/traefik/tls/k8s-dashboard.ing.yaml
- host: nw-k8s-db.xxx.cc

同样修改监听的主机头池。

应用并创建规则:

kubectl apply -f /etc/ansible/manifests/ingress/traefik/tls/k8s-dashboard.ing.yaml
kubectl get ingress -A

查看admin用户Token:

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

访问Dashboard页面,注意需要用HTTPS方式访问,使用上面的Token进入:

Nexus

JDK环境

官网下载JAVA:

tar zxf jdk-8u271-linux-x64.tar.gz -C /usr/local/
echo 'export JAVA_HOME=/usr/local/jdk1.8.0_271' > /etc/profile.d/java.sh
echo 'export JRE_HOME=$JAVA_HOME/jre' >> /etc/profile.d/java.sh
echo 'export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH' >> /etc/profile.d/java.sh
source /etc/profile.d/java.sh
java -version

Nexus

官网:https://www.sonatype.com

其专业版产品是收费的,不过也提供免费OSS版使用:

tar zxf nexus-3.30.0-01-unix.tar.gz -C /usr/local/
vim /usr/local/nexus-3.30.0-01/bin/nexus
...
INSTALL4J_JAVA_HOME_OVERRIDE=/usr/local/jdk1.8.0_271
...

配置数据存放目录(其默认在../sonatype-work/nexus3):

vim /usr/local/nexus-3.30.0-01/bin/nexus.vmoptions
...
-XX:LogFile=/data/nexus3/logs/jvm.log
-Dkaraf.data=/data/nexus3/data
-Dkaraf.log=/data/nexus3/logs
-Djava.io.tmpdir=/data/nexus3/tmp
...

设置服务:

mkdir -p /data/nexus3/{data,logs,tmp}
groupadd -g 333 nexus
useradd -g nexus -u 333 -s /sbin/nologin -d /data/nexus3/ -c "nexus user" -M nexus
chown -R nexus:nexus /data/nexus3/
vim /usr/lib/systemd/system/nexus.service
# systemd file for Nexus
[Unit]
Description=nexus service
After=network.target

[Service]
Type=forking
LimitNOFILE=65536
ExecStart=/usr/local/nexus-3.30.0-01/bin/nexus start
ExecStop=/usr/local/nexus-3.30.0-01/bin/nexus stop
User=nexus
Restart=on-abort

[Install]
WantedBy=multi-user.target
systemctl enable nexus
systemctl start nexus
systemctl status nexus

启动后其会在数据目录下自动初始化文件,其中etc目录下的nexus.properties可以设置监听端口,默认监听8081:

通过访问 http://IP:8081 即可访问其网页,默认管理员用户admin,admin密码保存在/data/nexus3/data/admin.password,初次登陆会要求更改,后会自动删除。

cat /data/nexus3/data/admin.password

发表评论

error: Content is protected !!