环境准备1Kubernetes集群安装纪要云计算容器化Contents环境准备 ............................................................................................... 1系统要求配置系统参数安装使用kubeadm安装Kubernetes ..................................................................... 3安装创建集群生成部署插件添加节点以前基本上是在本地开发,因此使用之类的轻量级环境十分方便。但现在需要在真实的服务器上部署,因此有机会体验一番,实际感受是比想象的要简单!环境准备系统要求本次安装以为基础,在分区时,特意给/var分区预留了较大的空间,因为考虑到容器运行会需要缓存较多镜像之类。集群安装要求机器关闭/swap分区,由于本次安装系统时直接未启用,因此不需要额外处理。若系统启用了分区,需要进行禁用方可安装。sudo swapoff -asudo vim /etc/fstab # 注释掉swap相关的行配置系统参数系统参数需要进行一些必要的配置:cat <<EOF | sudo tee /etc/modules-load.d/k8s.confoverlaybr_netfilterEOFsudo modprobe overlaysudo modprobe br_netfiltercat <<EOF | sudo tee /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-ip6tables = 1net.ipv4.ip_forward = 1EOFsudo sysctl --system其中,由于修改完成后,确保其生效: 环境准备2lsmod | grep br_netfilterlsmod | grep overlaysysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward正常情况下看到的应该类似下面这样的结果:$ lsmod | grep br_netfilterbr_netfilter 32768 0bridge 307200 1 br_netfilter$ lsmod | grep overlayoverlay 151552 0$ sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forwardnet.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-ip6tables = 1net.ipv4.ip_forward = 1安装containerd在准备安装为的节点上各自执行以下命令,安装作为容器运行时:sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-releasesudo mkdir -m 0755 -p /etc/apt/keyringscurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpgecho \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullsudo apt-get updatesudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginsudo usermod -aG docker $USERsudo systemctl enable docker.servicesudo systemctl enable containerd.service安装完成后,需要修改配置文件(),使用初始化一个默认配置文件并修改:sudo containerd config default | sudo tee /etc/containerd/config.toml由于镜像在国内无法下载,需要修改其中的一个镜像,这里使用上的镜像,同时,需要修改SystemdCgroup为true: 使用kubeadm安装Kubernetes3[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] ... [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = truesandbox_image = "registry.aliyuncs.com/google_containers/pause:3.6"修改后,重启:sudo systemctl restart containerd使用kubeadm安装Kubernetes安装kubeadm在各个节点上均执行以下命令安装:sudo apt-get install -y apt-transport-https ca-certificates curlcurl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -sudo echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.listsudo apt updatesudo apt-get install -y kubelet=1.25.6-00 kubeadm=1.25.6-00 kubectl=1.25.6-00sudo apt-mark hold kubelet kubeadm kubectl其中,指定了使用版本并通过apt-mark固定住版本,是因为这些工具版本默认会使用最新的,这里固定是项目所要求的。创建Kubernetes集群在节点上执行以下命令:sudo systemctl start kubeletsudo systemctl enable kubeletMASTER_IP="xx.xx.xx.xx"NODENAME=$(hostname -s)POD_CIDR="192.168.0.0/16"KUBERNETES_VERSION="v1.25.6"sudo kubeadm init \ --image-repository=registry.aliyuncs.com/google_containers \ --pod-network-cidr=$POD_CIDR \ --kubernetes-version $KUBERNETES_VERSION \ --apiserver-advertise-address $MASTER_IP \ --node-name $NODENAME其中MASTER_IP为其地址,该地址似乎不支持域名的方式。注意必须要确保、服务已经启动。否则,很可能会安装失败,如果安装失败,则可以删除之后,重新开始: 使用kubeadm安装Kubernetes4sudo kubeadm resetsudo rm -rf ~/.kube生成Configmkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config部署CNI插件部署插件:kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/tigera-operator.yamlkubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/custom-resources.yaml注意这里需要用create而不是apply,因其大小较大,方式限制Too long: must have at most 262144 byte。安装后,等待其创建完成:watch kubectl get pods -n calico-system完成后,移除节点上的污点:kubectl taint nodes --all node-role.kubernetes.io/control-plane-kubectl taint nodes --all node-role.kubernetes.io/master-添加worker节点在各个其他节点上执行:sudo systemctl start kubeletsudo systemctl enable kubelet使用节点的输出的命令来加入到集群中,例如:sudo kubeadm join xx.xx.xx.xx:6443 --token xnc87j.ia5dfxv418kxo6io \ --discovery-token-ca-cert-hash sha256:ea1f579ffc8023522f571ac6bba52e05b5997c359e1b244d827932d56fee57cd \ --node-name=k8s-worker其中,可以通过--node-name=k8s-worker参数指定节点名称。至此,安装完成。