1.1.1 K8S 1.20.x节点Hosts及防火墙设置
K8S master1、node1、node2节点进行如下配置:
#添加hosts解析; cat >/etc/hosts<<EOF 127.0.0.1 localhost localhost.localdomain 192.168.101.128 master1 192.168.101.129 node1 192.168.1.147 node2 EOF
#临时关闭selinux和防火墙; sed -i '/SELINUX/s/enforcing/disabled/g' /etc/sysconfig/selinux setenforce 0 systemctl stop firewalld.service systemctl disable firewalld.service
#同步节点时间; yum install ntpdate -y ntpdate pool.ntp.org
#修改对应节点主机名; hostname `cat /etc/hosts|grep $(ifconfig|grep broadcast|awk '{print $2}')|awk '{print $2}'`;su
#关闭swapoff; swapoff -a |
1.1.2 Linux内核参数设置&优化
cat > /etc/modules-load.d/ipvs.conf <<EOF # Load IPVS at boot ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack_ipv4 EOF systemctl enable --now systemd-modules-load.service
#确认内核模块加载成功
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
#安装ipset、ipvsadm
yum install -y conntrack ntpdate ntp ipvsadm ipset iptables curl sysstat libseccomp wget vim net-tools git
#配置内核参数;
cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF echo 1 > /proc/sys/net/ipv4/ip_forward sysctl --system |
1.1.3 Docker虚拟化案例实战
# 安装依赖软件包 yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加Docker repository,这里使用国内阿里云yum源
# 安装docker-ce,这里直接安装最新版本 yum install -y docker-ce
#修改docker配置文件 mkdir /etc/docker cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ], "registry-mirrors": ["https://uyah70su.mirror.aliyuncs.com"] } EOF
# 注意,由于国内拉取镜像较慢,配置文件最后增加了registry-mirrors mkdir -p /etc/systemd/system/docker.service.d
# 重启docker服务 systemctl daemon-reload systemctl enable docker.service
systemctl start docker.service ps -ef|grep -aiE docker |
1.1.4 Kubernetes添加部署源
Kubernetes Master节点上安装Docker、Etcd和Kubernetes、Flannel网络,添加kubernetes源指令如下:
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 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg EOF |
1.1.5 K8S 1.20.x Kubeadm案例实战
Kubeadm 是一个K8S部署工具,它提供了kubeadm init 以及 kubeadm join 这两个命令来快速创建kubernetes集群。
Kubeadm 通过执行必要的操作来启动和运行一个最小可用的集群。它故意被设计为只关心启动集群,而不是之前的节点准备工作。同样的诸如安装各种各样值得拥有的插件,例如Kubernetes Dashboard、监控解决方案以及特定云提供商的插件,这些都不在它负责的范围。
相反我们期望由一个基于 kubeadm 从更高层设计的更加合适的工具来做这些事情;并且,理想情况下,使用 kubeadm 作为所有部署的基础将会使得创建一个符合期望的集群变得容易。
Kubeadm:用于初始化K8S Cluster的工具,Kubelet:运行在Cluster所有节点上,负责调用Docker指令,启动POD和容器。kubectl:kubectl是kubenetes命令行工具,通过Kubectl可以部署和管理应用,查看各种资源,创建,删除和更新组件。
在机器上手动安装 docker、kubeadm、kubelet、kubectl 几个二进制文件,然后才能再容器化部署其他 Kubernetes 组件。主要通过kubeadm init初始化,初始化K8S集群的流程如下:
- 检查工作(Preflight Checks):检查Linux内核版本、Cgroups模块可用性、组件版本、端口占用情况、Docker等依赖情况;
- 生成对外提供服务的CA证书及对应的目录;
- 生成其他组件访问 kube-apiserver 所需的配置文件;
- 为Master组件生成Pod配置文件,利用这些配置文件,通过Kubernetes 中特殊的容器启动方法:“Static Pod”(Kubelet 启动时自动加载固定目录的 Pod YAML 文件并启动)便可以 Pod 方式部署起 kube-apiserver、kube-controller-manager、kube-scheduler 三个 Master 组件。同时还会生成 Etcd 的 Pod YAML 文件;
- 为集群生成一个Bootstrap token,其他节点加入集群的机器和 Apiserver打交道,需要获取相应的证书文件,所以Bootstrap token需要扮演安全验证的角色;
- 安装默认插件,例如:Kube-proxy 和Core DNS,分别提供集群的服务发现和 DNS 功能。
1)安装Kubeadm工具;
#安装Kubeadm; yum install -y kubeadm-1.20.4 kubelet-1.20.4 kubectl-1.20.4
#启动kubelet服务 systemctl enable kubelet.service
systemctl start kubelet.service
|
2)Kubeadm常见指令操作;
kubeadm init 启动一个 Kubernetes 主节点 kubeadm join 启动一个 Kubernetes 工作节点并且将其加入到集群 kubeadm upgrade 更新一个 Kubernetes 集群到新版本
kubeadm config 如果使用 v1.7.x 或者更低版本的 kubeadm 初始化集群,您需要对集群做一些配置以便使用 kubeadm upgrade 命令 kubeadm token 管理 kubeadm join 使用的令牌
kubeadm reset 还原 kubeadm init 或者 kubeadm join 对主机所做的任何更改
kubeadm version 打印 kubeadm 版本
kubeadm alpha 预览一组可用的新功能以便从社区搜集反馈 |
1.1.6 K8S 1.20.x Master节点实战
1)执行kubeadm init初始化安装Master相关软件;
kubeadm init --control-plane-endpoint=192.168.101.128:6443 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.20.4 --service-cidr=10.10.0.0/16 --pod-network-cidr=10.244.0.0/16 --upload-certs
#查看Master1节点上面调度Taints污点; kubectl describe node |grep -aiE Taints kubectl describe node master1|grep -aiE Taints
#去掉Master1节点上面不可调度Taints污点; kubectl taint node master1 node-role.kubernetes.io/master:NoSchedule- kubectl taint nodes --all node-role.kubernetes.io/control-plane:NoSchedule- |
2)根据如上指令操作,执行成功,如图所示(此图上IP 1.145改成101.128): file:///C:/Users/Administrator/AppData/Local/Temp/ksohtml19760/wps2.jpg file:///C:/Users/Administrator/AppData/Local/Temp/ksohtml19760/wps3.jpg 3)根据如上图提示,接下来需手工执行如下指令,拷贝admin配置文件;
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u).$(id -g) $HOME/.kube/config |
4)将Minion节点加入集群中,同时作为node节点加入K8S集群时使用的参数和指令如下;
kubeadm join 192.168.101.128:6443 --token ze0zfe.9zhew67l6gxsq7du \ --discovery-token-ca-cert-hash sha256:ee5a3f9accf98c76a3a3da1f3c4540c14c9e9ce49a4070de4b832aa8cb3a8f31 |
1.1.7 K8S 1.20.x集群节点和删除
#启动Node1节点上docker引擎服务; systemctl start docker.service
#将Node1节点加入K8S集群; kubeadm join 192.168.101.128:6443 --token ze0zfe.9zhew67l6gxsq7du \ --discovery-token-ca-cert-hash sha256:ee5a3f9accf98c76a3a3da1f3c4540c14c9e9ce49a4070de4b832aa8cb3a8f31
#执行kubeadm init时没有记录下加入集群的指令,可以通过以下命令重新创建即可; kubeadm token create --print-join-command
#登录K8S Master节点验证节点信息; kubectl get nodes
#删除一个节点前,先驱赶掉上面的pod容器; kubectl drain node3 --delete-local-data --force --ignore-daemonsets
#在Master端执行如下指令;
kubectl delete node/node3 |
|