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 |
安装
在管理节点上进行操作:
- 配置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 ====
- 下载脚本:
wget https://github.com/easzlab/kubeasz/releases/download/2.2.1/easzup chmod +x easzup
- 安装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
- 配置密钥登陆:
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
之后再访问就会快很多。
- 使用工具脚本下载k8s组件:
./easzup -D
脚本会下载所有需要的程序包到/etc/ansible/目录下。
- 配置群集参数:
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
- 分步安装:
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
- 查看状态:
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
其专业版产品是收费的,不过也提供免费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