k8s快速部署一主两备集群环境
环境准备
在开始之前,部署Kubernetes 集群机器需要满足以下几个条件:
一台或多台机器,操作系统CentOS7.x-86_x64
硬件配置:2GB 或更多RAM,2 个CPU 或更多CPU,硬盘30GB 或更多
集群中所有机器之间网络互通
可以访问外网,需要拉取镜像
禁止swap 分区
10.0.0.110 master #主节点
10.0.0.111 node1 #工作节点1
10.0.0.112 node2 #工作节点2
所有机器上面的操作
关闭防火墙
systemctl stop firewalld #关闭
systemctl disable firewalld #关闭开机自启
关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久关闭
setenforce 0 # 临时
关闭swap
swapoff -a # 先停止swap
vim /etc/fstab # 打开这个目录,永久删掉红框里面的,如下图
mount -a #重新挂载
安装基础所需
yum install net-tools vim tree htop iftop gcc gcc-c++ glibc \
iotop lrzsz sl wget unzip telnet nmap nc psmisc \
dos2unix bash-completion bash-completion-extra sysstat \
rsync nfs-utils httpd-tools chrony ntpdate screen lsof -y
根据规划设置主机名
hostnamectl set-hostname master #单独在10.0.0.110里面更改
hostnamectl set-hostname node1 #单独在10.0.0.111里面更改
hostnamectl set-hostname node2 #单独在10.0.0.112里面更改
配置hosts文件
cat >> /etc/hosts<<EOF
10.0.0.110 master
10.0.0.111 node1
10.0.0.112 node2
EOF
同步yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup #备份原有源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
#同步阿里云源
yum makecache #生成缓存
开启ipv4内核转发模块 br_netfilter 模块
modprobe br_netfilter #将 br_netfilter 模块加载到内核中,从而使其生效
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf
开启ipvs
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_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && \
bash /etc/sysconfig/modules/ipvs.modules && \
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
安装管理ipvs规则的工具ipvsadm
yum install -y ipset ipvsadm
时间同步
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ntpdate cn.pool.ntp.org
crontab -e
* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org &> /dev/null\
安装containerd
yum install -y yum-utils device-mapper-persistent-data lvm2
yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap ee
dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc pdate
openldap-devel
yum-config-manager --add-repo https://mirrors.aliyun.com/dockerce/linux/centos/docker-ce.repo
yum install containerd.io-1.6.6 -y
修改containerd的配置文件
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
vim /etc/containerd/config.toml
把SystemdCgroup = false修改成SystemdCgroup = true
把sandbox_image = "k8s.gcr.io/pause:3.6"修改成sandbox_image =
"registry.aliyuncs.com/google_containers/pause:3.9"
找到config_path = "",修改成:config_path = "/etc/containerd/certs.d"
配置contianerd加速器
mkdir /etc/containerd/certs.d/docker.io/ -p
cat > /etc/containerd/certs.d/docker.io/hosts.toml <<EOF
[host."https://vh3bm52y.mirror.aliyuncs.com",host."https://registry.dockerbacn.com"]
capabilities = ["pull"]
EOF
修改containerd的管理工具
cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
启动containerd
systemctl start containerd
systemctl enable containerd
配kubernetes.repo源
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装 kubeadm、kubelet、kubectl
yum install -y kubelet-1.26.0 kubeadm-1.26.0 kubectl-1.26.0
设置kubelet开机自启
systemctl enable --now kubelet
容器运行时 CNI
crictl config runtime-endpoint /run/containerd/containerd.sock
关机快照!关机快照!关机快照!关机快照!关机快照!关机快照!
接下来的操作在单台master上面
修改dns解析
vim /etc/resolv.conf
#追加
nameserver 223.5.5.5
nameserver 223.6.6.6
#为了加速拉取镜像而转发dns解析
生成初始化配置文件
kubeadm config print init-defaults > kubeadm.yaml
修改初始化配置文件
vim kubeadm.yaml
advertiseAddress: 10.0.0.0.81 # apiserver 节点内网IP
name: master # master的主机名
imageRepository: registry.aliyuncs.com/google_containers #修改成阿里云镜像源
podSubnet: 10.244.0.0/16 #Pod 网段,calico插件需要使用这个网段
#行尾加入如下配置
#设置网络转发模式选择ipvs
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
#设置cgroup驱动 通过systemd进行一起管理
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
下载相关仓库镜像
kubeadm config images pull --config kubeadm.yaml
#这里需要耐心等待,这里的快慢取决于网络的速度,一直没反应属于正常状态
#error报错中有“timeout”证明网络不好,请更换网络环境后,重新拉取
下载用于容器间通信的网络插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#一样,这里的快慢取决于网络环境
初始化一个 Kubernetes 集群
kubeadm init --config kubeadm.yaml
#运行完成之后会出现下图结果
#其中1、2、3、4在master上运行
#5复制完整后在node1和node2上运行
在node1和node2上操作
加入master
#如果node1和node2上面执行报错可尝试在三台机器上面执行以下命令#
modprobe br_netfilter
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf
在master机上查看当前集群中所有节点的状态和信息
kubectl get nodes
#如果三台机器的“STATUS”状态为"NotReady“,请耐心等待,这里也需要网络环境的支持
查看镜像状态
kubectl get pod -A #Running这个状态是正常的