ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Kubernetes之高可用集群

2022-05-18 17:34:48  阅读:177  来源: 互联网

标签:kubernetes Kubernetes -- etc yum && 集群 之高 bash


Kubernetes之高可用集群

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

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

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

 

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

 


1. 基础设置

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

  • [1] 设置系统主机名
  bash
# 设置系统主机名和Host文件的相互解析
$ hostnamectl set-hostname k8s-master
$ hostnamectl set-hostname k8s-node1
$ hostnamectl set-hostname k8s-node2
  • [2] 安装依赖包
  bash
# 基本包
$ yum install -y \
    conntrack ntpdate ntp ipvsadm ipset jq iptables \
    curl sysstat libseccomp wget vim net-tools git
  • [3] 设置防火墙
  bash
# 关闭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
  bash
# 关闭缓存
$ swapoff -a \
   && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

# 关闭安全设置
$ setenforce 0 \
    && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
  • [5] 调整内核参数
  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
  • [6] 调整系统时区
  bash
# 设置系统时区为中国/上海
$ timedatectl set-timezone Asia/Shanghai

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

# 重启依赖于系统时间的服务
$ systemctl restart rsyslog
$ systemctl restart crond
  • [7] 设置 rsyslogd 服务
  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
  • [8] 升级系统内核为 4.44+
  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)
  • [9] 关闭 NUMA
  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 集群构建的相关操作!

  • [1] 开启 ipvs 服务
  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
  • [2] 安装 Docker 软件
  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
  • [3] 在主节点启动 Haproxy 与 Keepalived 容器
  bash
# 导入脚本 > 运行 > 查看可用节点

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

# Keepalived
$ kubectl apply -f kube-keepalived.yml
  • [4] 安装 Kubeadm 工具
  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
  • [5] 初始化主节点
  bash
# 初始化主节点并加入主节点以及其余工作节点
$ kubeadm config print init-defaults > kubeadm-config.yaml
$ kubeadm init --config=kubeadm-config.yaml \
    --experimental-upload-certs | tee kubeadm-init.log
  • [6] Etcd 集群状态查看
  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
  • [7] 部署网络
  bash
$ kubectl apply -f kube-flannel.yml

3. 注意事项

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


   

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有