一、目的
本文档用于介绍,如何快速在生产环境安装一个稳定运行的kubernetes集群,用于运行项目微服务。
二、主机规划
| 主机名称 | 角色 | IP地址 | 基础软件 |
|---|---|---|---|
| rancher | 管理k8s集群 | 192.168.130.5 | docker-ce |
| k8s-master01 | k8s集群主节点 | 192.168.130.6 | docker-ce |
| k8s-master02 | k8s集群从节点 | 192.168.130.7 | docker-ce |
以下均以「主机名称」说明在哪台主机上操作。所有节点均为Centos 7。
三、节点 OS 调优
3.1 内核调优
echo "net.bridge.bridge-nf-call-ip6tables=1net.bridge.bridge-nf-call-iptables=1net.ipv4.ip_forward=1net.ipv4.conf.all.forwarding=1net.ipv4.neigh.default.gc_thresh1=4096net.ipv4.neigh.default.gc_thresh2=6144net.ipv4.neigh.default.gc_thresh3=8192net.ipv4.neigh.default.gc_interval=60net.ipv4.neigh.default.gc_stale_time=120#参考 https://github.com/prometheus/node_exporter#disabled-by-defaultkernel.perf_event_paranoid=-1#sysctls for k8s node confignet.ipv4.tcp_slow_start_after_idle=0net.core.rmem_max=16777216fs.inotify.max_user_watches=524288kernel.softlockup_all_cpu_backtrace=1kernel.softlockup_panic=0kernel.watchdog_thresh=30fs.file-max=2097152fs.inotify.max_user_instances=8192fs.inotify.max_queued_events=16384vm.max_map_count=262144fs.may_detach_mounts=1net.core.netdev_max_backlog=16384net.ipv4.tcp_wmem=4096 12582912 16777216net.core.wmem_max=16777216net.core.somaxconn=32768net.ipv4.ip_forward=1net.ipv4.tcp_max_syn_backlog=8096net.ipv4.tcp_rmem=4096 12582912 16777216net.ipv6.conf.all.disable_ipv6=1net.ipv6.conf.default.disable_ipv6=1net.ipv6.conf.lo.disable_ipv6=1kernel.yama.ptrace_scope=0vm.swappiness=0# 可以控制core文件的文件名中是否添加pid作为扩展。kernel.core_uses_pid=1# Do not accept source routingnet.ipv4.conf.default.accept_source_route=0net.ipv4.conf.all.accept_source_route=0# Promote secondary addresses when the primary address is removednet.ipv4.conf.default.promote_secondaries=1net.ipv4.conf.all.promote_secondaries=1# Enable hard and soft link protectionfs.protected_hardlinks=1fs.protected_symlinks=1# 源路由验证# see details in https://help.aliyun.com/knowledge_detail/39428.htmlnet.ipv4.conf.all.rp_filter=0net.ipv4.conf.default.rp_filter=0net.ipv4.conf.default.arp_announce = 2net.ipv4.conf.lo.arp_announce=2net.ipv4.conf.all.arp_announce=2# see details in https://help.aliyun.com/knowledge_detail/41334.htmlnet.ipv4.tcp_max_tw_buckets=5000net.ipv4.tcp_syncookies=1net.ipv4.tcp_fin_timeout=30net.ipv4.tcp_synack_retries=2kernel.sysrq=1" >> /etc/sysctl.conf
接着执行 sysctl -p命令。
3.2 nofile
cat >> /etc/security/limits.conf <<EOF* soft nofile 65535* hard nofile 65536EOF
3.3 关闭防火墙
systemctl disable firewalld.service
3.4 关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
四、Docker安装
每台主机均使用 root 用户登录,每台均安装 docker-ce,安装命令为。
mkdir -p /etc/dockertee /etc/docker/daemon.json <<-'EOF'{"oom-score-adjust": -1000,"data-root":"/var/lib/docker","log-driver":"json-file","log-opts":{"max-size":"100m","max-file":"3"},"default-address-pools":[{"base":"10.168.0.0/16","size":24}],"max-concurrent-downloads":50,"max-concurrent-uploads":50,"registry-mirrors":["https://x6kx40rp.mirror.aliyuncs.com","https://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com"],"storage-driver": "overlay2","storage-opts": ["overlay2.override_kernel_check=true"]}EOFyum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum makecache fastyum -y install docker-cesystemctl enable dockersystemctl daemon-reloadsystemctl restart docker
对于 CentOS 系统,docker.service 默认位于/usr/lib/systemd/system/docker.service,编辑docker.service,添加以下参数。
- 防止 docker 服务 OOM:
OOMScoreAdjust=-1000 - 开启 iptables 转发链:
ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT
配置完成后重启服务器。
五、Rancher安装
在主机 rancher 上,执行如下命令。
docker run -d \--name rancher \--restart=unless-stopped \--privileged \-p 80:80 -p 443:443 \-v /data/rancher:/var/lib/rancher \registry.cn-hangzhou.aliyuncs.com/rancher/rancher:v2.5.16
待容器拉取完毕后1分钟后进入页面,首次进入需要设置新密码。

输入密码后进入下一个页面,输入rancher的地址,如有域名建议使用域名代替IP。

Rancher的这个页面可以支持中文显示,接下来创建集群的操作只用鼠标点击即可完成。

六、国内加速
进入系统设置,找到system-default-registry选项,点击升级。

填入registry.cn-hangzhou.aliyuncs.com

七、集群创建
点击添加集群,进入创建K8S集群页面,点击自定义。

按需选择k8s版本,网络插件无特殊情况使用默认的Canal即可。

八、注册节点
8.1 创建Master节点
选择Etcd角色和Control角色,点击下方复制到剪切板。

ssh进入master节点粘贴命令。

8.2 创建Worker节点
选择Worker角色,点击下方复制到剪切板。

ssh进入到worker节点粘贴命令。

此时到Rancher管理页面,点击全局,看到有刚才创建的k8s集群:

点击主机,在这里可以看到集群部署过程中的各种状态,最终出现绿色的Active状态时,即表示K8S集群Master节点创建成功。
8.3 集群初始化中

8.4 集群初始化完毕
如果后续需要添加节点,回到全局页面点右边三个点就能进入注册页面即可。

八、项目/命名空间
进入集群的项目/命名空间。

在此页面点击添加项目,我们来添加一个项目测试。

这里可以给项目设置一些默认配置。

接下来给项目添加命名空间test。

进入项目。

尝试部署一个服务,输入部署服务的名称、命名空间、docker镜像、端口映射规则等。

点击启动。

等待一段时间后。

找到暴露的Nodeport入口。

直接打开了nginx页面。

九、收尾
根据以上步骤操作,可创建出一个在生产稳定运行的k8s集群。
