1. 本地环境
3台虚拟机 centos7.9 ,部署kubernetes1.20.7
1.1 查看本机centos版本信息
cat /etc/redhat-release
1.2 查看docker版本,本地是20.10.6
docker version
1.3 因为k8s是根据主机名来查找主机的,因此需要设置3台虚机的hostname不相同
修改主机名 vi /etc/hostname 3台主机分别修改为master1/node1/node2 修改域名解析hosts vi /etc/hosts 在文件中追加如下配置,需要根据实际情况修改ip地址 10.0.0.30 master1 10.0.0.31 node1 10.0.0.32 node2
cat >> /etc/hosts << EOF
10.0.0.30 master1
10.0.0.31 node1
10.0.0.32 node2
EOF
1.4 修改selinx
# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
1.5 关闭swap
# 当前临时关闭虚拟内存
swapoff -a
# 修改/etc/fstab文件
vi /etc/fstab
注释掉swap的自动挂载,wq保存。
#/dev/mapper/centos-swap swap swap defaults 0 0
1.6 关闭防火墙
systemctl stop firewalld systemctl disable firewalld chkconfig firewalld off
1.7 配置iptables
确保 br_netfilter
模块被加载。这一操作可以通过运行
lsmod | grep br_netfilter 来完成。
为了让你的 Linux 节点上的 iptables 能够正确地查看桥接流量,你需要确保在你的 sysctl
配置中将 net.bridge.bridge-nf-call-iptables
设置为 1。
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sudo sysctl --system
2 在3台虚机上安装 kubeadm、kubectl、kubelet
2.1 使用阿里云镜像加速国内安装
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
2.2 查看可以安装的版本
yum list -y kubeadm --showduplicates
2.3 安装
yum install -y kubelet-1.20.7-0 kubeadm-1.20.7-0 kubectl-1.20.7-0 --disableexcludes=kubernetes 启动 systemctl start kubelet 开机启动 systemctl enable kubelet
3 在master虚机中执行以下命令初始化master,使用kubeadm初始化master
3.1 查看所需镜像及版本
kubeadm config images list #可以查看部署服务所需要用的镜像以及版本信息。
3.2 初始化master
kubeadm init \ --kubernetes-version=v1.20.7 \ --pod-network-cidr=10.20.0.0/16 \ --image-repository registry.aliyuncs.com/google_containers \ --apiserver-advertise-address 10.0.0.30 \ --v=6 参数说明: kubernetes-version:要安装的版本 pod-network-cidr:负载容器的子网网段 image-repository:指定镜像仓库(由于从阿里云拉镜像,解决了k8s.gcr.io镜像拉不下来的问题) apiserver-advertise-address:节点绑定的服务器ip(多网卡可以用这个参数指定ip) v=6:这个参数我还没具体查文档,用法是初始化过程显示详细内容,部署过程如果有问题看详细信息很多时候能找到问题所在
当显示 successfully 表示安装成功
3.3 按照提示开始启动
mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config
3.4 安装网络 flannel
mkdir -p /opt/yaml/k8s
获取部署flannel的yaml文件
https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml
到/opt/yaml/k8s 目录中
# 将quay.io换成quay.mirrors.ustc.edu.cn(中科大)的镜像
sed -i 's#quay.io/coreos/flannel#quay.mirrors.ustc.edu.cn/coreos/flannel#' /opt/yaml/k8s/kube-flannel.yml
部署网络
# 部署flannel kubectl apply -f /opt/yaml/k8s/kube-flannel.yml
此时查看节点信息
kubectl get nodes
可以看到 master 已经ready
3.5 node节点加入集群,在node1/node2中执行
kubeadm join 10.0.0.30:6443 --token e4bs8w.jvxmhysk8alc1zuv \ --discovery-token-ca-cert-hash sha256:4270b15c29b428387cfb76c747053be05965c84a448d69af87c8997bbb12fe31
此时查看节点信息,已经全部ready
kubectl get nodes
4 token相关操作
可以在master节点上通过 kubeadm token list 得到token,默认24小时后过期。
token过期后,新节点要加入该集群,需要在master节点上用下面的命令重新生成token。
kubeadm token create
kubeadm token create --print-join-command
5 集群卸载
集群重置 kubeadm reset 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 clean all yum remove kube*
参考资料:
https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
https://www.cnblogs.com/straycats/p/14322995.html