部署Kubernetes集群1.19.8

部署Kubernetes集群1.19.8

1.K8S环境准备(所有节点配置)

虚拟机安装须知

一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令,每台机器 2 GB 或更多的 RAM(如果少于这个数字将会影响你应用的运行内存)CPU 2 核心及以上,集群中的所有机器的网络彼此均能相互连接(公网和内网都可以),节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见这里了解更多详细信息。

主机名 IP 版本
master01 192.168.20.100 kube-1.19.8
node01 192.168.20.101
node02 192.168.20.102
node03 192.168.20.103

1.1 关闭swap分区

swapoff -a && sysctl -w vm.swappiness=0
sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab

#确保各个节点MAC地址或product_uuid唯一(可以不用管)
ifconfig  eth0  | grep ether | awk '{print $2}'
cat /sys/class/dmi/id/product_uuid 
#温馨提示:
#一般来讲,硬件设备会拥有唯一的地址,但是有些虚拟机的地址可能会重复。 
#Kubernetes使用这些值来唯一确定集群中的节点。 如果这些值在每个节点上不唯一,可能会导致安装失败。

1.2 检查网络节点是否互通

简而言之,就是检查你的k8s集群各节点是否互通,可以使用ping命令来测试。

1.3 允许iptable检查桥接流量

cat <<EOF | tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

1.4 配置docker源

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

#这是查看docker都要那些版本(可以不用管)
yum list docker-ce --showduplicates

1.5 安装指定的docker版本

yum -y install docker-ce-18.09.9 docker-ce-cli-18.09.9
yum -y install bash-completion
source /usr/share/bash-completion/bash_completion

1.6 配置docker优化

mkdir -pv /etc/docker && cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "insecure-registries": ["master01:5000"],
  "registry-mirrors": ["https://tuv7rqqq.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

1.7 配置docker开机自启动

#禁用防火墙、禁用selinux
systemctl enable --now docker && systemctl status docker
systemctl disable --now firewalld
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config 
grep ^SELINUX= /etc/selinux/config

1.8 配置host解析

cat >> /etc/hosts <<'EOF'
192.168.20.100 master0
192.168.20.101 node01
192.168.20.102 node02
192.168.20.103 node03
EOF
cat /etc/hosts

1.9 master01节点启用docker registry的私有仓库

docker run -dp 5000:5000 --restart always --name master-registry registry:2

2.安装kubeadm,kubelet、kubectl

2.1 配置软件源(所有节点)

cat  > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
EOF

2.2 安装kubeadm,kubelet,kubectl软件包(所有节点)

yum -y install kubeadm-1.19.8 kubelet-1.19.8 kubectl-1.19.8

systemctl enable --now kubelet.service

3.初始化master

3.1 使用kubeadm初始化master节点

kubeadm init --kubernetes-version=v1.19.8 --image-repository registry.aliyuncs.com/google_containers  --pod-network-cidr=10.244.0.0/16 --service-cidr=10.254.0.0/16

3.2 拷贝授权文件,用于管理K8S集群

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config 

3.3 查看节点

#只会显示一个 不要紧 还没有安装完
kubectl get nodes

3.4 将令牌拷贝到node节点

#所有节点执行
kubeadm join 10.0.0.201:6443 --token dz4q8s.mtidik1zy0rn8wq8 \
    --discovery-token-ca-cert-hash sha256:6b0dae420423df059770775c8be493fbd2e58c62e8e31b8c5c66197f6e775ab9 

===这里用于token令牌过期了可以使用这个方式==
#如果中途不小心找不到这个令牌了 就重新生成打印这是node节点的key
kubeadm token create --print-join-command

#还有一个生成master节点的key
kubeadm init phase upload-certs --upload-certs

4.初始化网络组件

选择其中一个即可:

简单对比

flannel

1.引入了多个网络组件,在网络通信时需要转到flannel0网络接口,再转到用户态的flanneld程序,到对端后还需要走这个过程的反过程,所以也会引入一些网络的时延损耗。

2.Flannel模型默认采用了UDP作为底层传输协议,UDP本身是非可靠协议,虽然两端的TCP实现了可靠传输,但在大流量、高并发的应用场景下还建议多次测试。

calico

1.节点组网时可以直接利用数据中心的网络结构(L2或者L3),不需要额外的NAT、隧道或者Overlay Network,没有额外的封包解包,能够节约CPU运算,提高网络效率。

2.在小规模集群中可以直接互联,在大规模集群中可以通过额外的BGP route reflector来完成。

3.基于iptables或ipvs还提供了丰富的网络策略,实现了Kubernetes的Network Policy策略,提供容器间网络可达性限制的功能。

争议 | Flannel vs Calico,k8s 网络方案该选谁?_51CTO博客_k8s flannel calico区别

  • flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
  • calico
wget https://docs.projectcalico.org/manifests/calico.yaml
#上面不好使的话用下面的
wget https://docs.projectcalico.org/v3.14/manifests/calico.yaml --no-check-certificate

#如果网络插件初始化出现假死的情况 也就是显示是运行的(runing)但是显示是0但又不影响业务 增加一条内容
#搜索/IPIP 找到key value格式字样 增加下面内容 可以指定一个网卡(我这里就指定一个网卡了)
- name: IP_AUTODETECTION_METHOD #增加内容
  value: "interface=eth0"  #增加内容

5.添加自动补全功能

echo "source <(kubectl completion bash)" >> ~/.bashrc && source ~/.bashrc 

6.卸载重新安装

kubeadm reset -f
modprobe -r ipip
lsmod
rm -rf ~/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/systemd/system/kubelet.service.d
rm -rf /etc/systemd/system/kubelet.service
rm -rf /usr/bin/kube*
rm -rf /etc/cni
rm -rf /opt/cni
rm -rf /var/lib/etcd
rm -rf /var/etcd
yum -y remove kubeadm* kubectl* kubelet* docker*
reboot
#还需要删除docker image镜像哦
posted @ 2022-10-14 14:08  YIDADA-SRE  阅读(105)  评论(0编辑  收藏  举报