其他分享
首页 > 其他分享> > Kubernetes之高可用集群

Kubernetes之高可用集群

作者:互联网

Kubernetes之高可用集群

文章作者: Escape  文章链接: https://www.escapelife.site/posts/f8b7fb74.html

我们一起学习如何搭建 Kubernetes 的高可用的集群构建吧!

Kubernetes 作为近几年最具颠覆性的容器编排技术,广泛应用与企业的生产环境中,相较于前几年的 docker-swarm 的编排方式,Kubernetes 无疑是站在一个更高的角度对容器进行管理,方便日后项目的普适性,容易对架构进行扩展。

 

Kubernetes之高可用集群 Kubernetes之高可用集群

 


1. 基础设置

记录在安装之前需要准备的内容和操作!

  bash
# 设置系统主机名和Host文件的相互解析
$ hostnamectl set-hostname k8s-master
$ hostnamectl set-hostname k8s-node1
$ hostnamectl set-hostname k8s-node2
  bash
# 基本包
$ yum install -y \
    conntrack ntpdate ntp ipvsadm ipset jq iptables \
    curl sysstat libseccomp wget vim net-tools git
  bash
# 关闭Firewall防火墙
$ systemctl stop firewalld && systemctl disable firewalld

# 设置空规则
$ yum -y install iptables-services \
    && systemctl start iptables \
    && systemctl enable iptables \
    && iptables -F && service iptables save
  bash
# 关闭缓存
$ swapoff -a \
   && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

# 关闭安全设置
$ setenforce 0 \
    && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
  bash
# 对于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
  bash
# 设置系统时区为中国/上海
$ timedatectl set-timezone Asia/Shanghai

# 将当前的UTC时间写入硬件时钟
$ timedatectl set-local-rtc 0

# 重启依赖于系统时间的服务
$ systemctl restart rsyslog
$ systemctl restart crond
  bash
# 持久化保存日志的目录
$ 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
  bash
# 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)
  bash
# 非均匀访存模型

# 备份配置
$ 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 集群构建的相关操作!

  bash
# 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
  bash
# 安装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
  bash
# 导入脚本 > 运行 > 查看可用节点

# Haproxy
$ kubectl apply -f kube-haproxy.yml

# Keepalived
$ kubectl apply -f kube-keepalived.yml
  bash
# 主从配置
$ 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
  bash
# 初始化主节点并加入主节点以及其余工作节点
$ kubeadm config print init-defaults > kubeadm-config.yaml
$ kubeadm init --config=kubeadm-config.yaml \
    --experimental-upload-certs | tee kubeadm-init.log
  bash
# 启动服务
$ 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
  bash
$ kubectl apply -f kube-flannel.yml

3. 注意事项

记录在安装过程中重点或者重要的内容!


   

标签:kubernetes,Kubernetes,--,etc,yum,&&,集群,之高,bash
来源: https://www.cnblogs.com/haoee/p/16285510.html