使用rancher快速建立一套生产可用的k8s集群

一、目的

本文档用于介绍,如何快速在生产环境安装一个稳定运行的kubernetes集群,用于运行项目微服务。

、主机规划

主机名称

角色

IP地址

基础软件

rancher

管理k8s集群

192.168.130.5

docker-ce

k8s-master01

k8s集群主节点

192.168.130.6

docker-ce

k8s-worker01

k8s集群从节点

192.168.130.7

docker-ce

以下均以「主机名称」说明在哪台主机上操作。所有节点均为Centos 7

、节点 OS 调优

3.1 内核调优

echo "
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1
net.ipv4.conf.all.forwarding=1
net.ipv4.neigh.default.gc_thresh1=4096
net.ipv4.neigh.default.gc_thresh2=6144
net.ipv4.neigh.default.gc_thresh3=8192
net.ipv4.neigh.default.gc_interval=60
net.ipv4.neigh.default.gc_stale_time=120

# 参考 https://github.com/prometheus/node_exporter#disabled-by-default
kernel.perf_event_paranoid=-1

#sysctls for k8s node config
net.ipv4.tcp_slow_start_after_idle=0
net.core.rmem_max=16777216
fs.inotify.max_user_watches=524288
kernel.softlockup_all_cpu_backtrace=1

kernel.softlockup_panic=0

kernel.watchdog_thresh=30
fs.file-max=2097152
fs.inotify.max_user_instances=8192
fs.inotify.max_queued_events=16384
vm.max_map_count=262144
fs.may_detach_mounts=1
net.core.netdev_max_backlog=16384
net.ipv4.tcp_wmem=4096 12582912 16777216
net.core.wmem_max=16777216
net.core.somaxconn=32768
net.ipv4.ip_forward=1
net.ipv4.tcp_max_syn_backlog=8096
net.ipv4.tcp_rmem=4096 12582912 16777216

net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1

kernel.yama.ptrace_scope=0
vm.swappiness=0

# 可以控制core文件的文件名中是否添加pid作为扩展。
kernel.core_uses_pid=1

# Do not accept source routing
net.ipv4.conf.default.accept_source_route=0
net.ipv4.conf.all.accept_source_route=0

# Promote secondary addresses when the primary address is removed
net.ipv4.conf.default.promote_secondaries=1
net.ipv4.conf.all.promote_secondaries=1

# Enable hard and soft link protection
fs.protected_hardlinks=1
fs.protected_symlinks=1

# 源路由验证
# see details in https://help.aliyun.com/knowledge_detail/39428.html
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_announce=2

# see details in https://help.aliyun.com/knowledge_detail/41334.html
net.ipv4.tcp_max_tw_buckets=5000
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_synack_retries=2
kernel.sysrq=1
" >> /etc/sysctl.conf

接着执行 sysctl -p命令。

3.2 nofile

cat >> /etc/security/limits.conf <<EOF
* soft nofile 65535
* hard nofile 65536
EOF

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/docker
tee /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"
    ]
}
EOF
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

yum makecache fast

yum -y install docker-ce

systemctl enable docker
systemctl daemon-reload
systemctl 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集群。

posted @ 2023-01-30 17:04  wushaoyu  阅读(2521)  评论(0编辑  收藏  举报