Kubernetes之高可用集群
我们一起学习如何搭建 Kubernetes 的高可用的集群构建吧!
Kubernetes 作为近几年最具颠覆性的容器编排技术,广泛应用与企业的生产环境中,相较于前几年的 docker-swarm 的编排方式,Kubernetes 无疑是站在一个更高的角度对容器进行管理,方便日后项目的普适性,容易对架构进行扩展。
1. 基础设置
记录在安装之前需要准备的内容和操作!
- [1] 设置系统主机名
# 设置系统主机名和Host文件的相互解析 $ hostnamectl set-hostname k8s-master $ hostnamectl set-hostname k8s-node1 $ hostnamectl set-hostname k8s-node2
- [2] 安装依赖包
# 基本包 $ yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
- [3] 设置防火墙
# 关闭Firewall防火墙 $ systemctl stop firewalld && systemctl disable firewalld # 设置空规则 $ yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save
- [4] 关闭 SELINUX
# 关闭缓存 $ swapoff -a && sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab # 关闭安全设置 $ setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
- [5] 调整内核参数
# 对于K8S而言 $ cat > kubernetes.conf <<EOF net.bridge.bridge-nf-call-iptables= net.bridge.bridge-nf-call-ip6tables= net.ipv4.ip_forward= net.ipv4.tcp_tw_recycle= vm.swappiness=0 # 禁止使用swap空间 vm.overcommit_memory=1 # 不检查物理内存是否够用 vm.panic_on_oom=0 # 开启 OOM fs.inotify.max_user_instances= fs.inotify.max_user_watches= fs.file-max= fs.nr_open= net.ipv6.conf.all.disable_ipv6= net.netfilter.nf_conntrack_max= EOF # 使之生效 $ cp kubernetes.conf /etc/sysctl.d/kubernetes.conf $ sysctl -p /etc/sysctl.d/kubernetes.conf
- [6] 调整系统时区
# 设置系统时区为中国/上海 $ timedatectl set-timezone Asia/Shanghai # 将当前的UTC时间写入硬件时钟 $ timedatectl set-local-rtc 0 # 重启依赖于系统时间的服务 $ systemctl restart rsyslog $ systemctl restart crond
- [7] 设置 rsyslogd 服务
# 持久化保存日志的目录 $ mkdir /var/log/journal $ mkdir /etc/systemd/journald.conf.d # 配置文件 $ cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF [Journal] # 持久化保存到磁盘 Storage=persistent # 压缩历史日志 Compress=yes SyncIntervalSec=5m RateLimitInterval=30s RateLimitBurst= 1000 # 最大占用空间10G SystemMaxUse=10G # 单日志文件最大200M SystemMaxFileSize=200M # 日志保存时间2周 MaxRetentionSec=2week # 不将日志转发到syslog ForwardToSyslog=no EOF # 重启服务 $ systemctl restart systemd-journald
- [8] 升级系统内核为 4.44+
# CentOS7.x系统自带的3.10.x内核存在一些Bug # 有概率会导致运行的Docker、Kubernetes等服务异常且不稳定 $ rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm # 安装完成后检查/boot/grub2/grub.cfg配置文件中是否 # 对应内核menuentry中包含initrd16配置,如果没有再安装 $ yum --enablerepo=elrepo-kernel install -y kernel-lt # 设置开机从新内核启动 $ grub2-set-default "CentOS Linux (4.4.182-1.el7.elrepo.x86_64) 7 (Core)" # 重启后安装内核源文件 $ yum --enablerepo=elrepo-kernel install kernel-lt-devel-$(uname -r) kernel-lt-headers-$(uname -r)
- [9] 关闭 NUMA
# 非均匀访存模型 # 备份配置 $ cp /etc/default/grub{,.bak} $ cp /boot/grub2/grub.cfg{,.bak} # 添加 `numa=off` 参数 $ vim /etc/default/grub $ GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rhgb quiet numa=off" # 加载配置 $ grub2-mkconfig -o /boot/grub2/grub.cfg
2. 服务配置
记录部署高可用的 K8S 集群构建的相关操作!
- [1] 开启 ipvs 服务
# kube-proxy开启ipvs的前置条件 # 载入指定的个别模块 $ modprobe br_netfilter # 修改配置 $ cat > /etc/sysconfig/modules/ipvs.modules <<EOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv EOF # 加载配置 $ chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv
- [2] 安装 Docker 软件
# 安装LVM存储 $ yum install -y yum-utils device-mapper-persistent-data lvm # 安装docer-ce工具 $ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo && yum update -y && yum install -y docker-ce # 修改daemon配置文件 $ cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" } } EOF # 重启docker服务 $ systemctl daemon-reload && systemctl restart docker && systemctl enable docker
- [3] 在主节点启动 Haproxy 与 Keepalived 容器
# 导入脚本 > 运行 > 查看可用节点 # Haproxy $ kubectl apply -f kube-haproxy.yml # Keepalived $ kubectl apply -f kube-keepalived.yml
- [4] 安装 Kubeadm 工具
# 主从配置 $ cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_ enabled= gpgcheck= repo_gpgcheck= gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF # 安装工具 $ yum -y install kubeadm-1.15.1 kubectl-1.15.1 kubelet-1.15.1 && systemctl enable kubelet.service
- [5] 初始化主节点
# 初始化主节点并加入主节点以及其余工作节点 $ kubeadm config print init-defaults > kubeadm-config.yaml $ kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log
- [6] Etcd 集群状态查看
# 启动服务 $ kubectl -n kube-system exec etcd-k8s-master01 -- etcdctl --endpoints=https://192.168.92.10:2379 --ca-file=/etc/kubernetes/pki/etcd/ca.crt --cert-file=/etc/kubernetes/pki/etcd/server.crt --key-file=/etc/kubernetes/pki/etcd/server.key cluster-health $ kubectl get endpoints kube-controller-manager --namespace=kube-system -o yaml $ kubectl get endpoints kube-scheduler --namespace=kube-system -o yaml
- [7] 部署网络
$ kubectl apply -f kube-flannel.yml
3. 注意事项
记录在安装过程中重点或者重要的内容!