夜雨聆风学习资料网

ARTICLE · 1111835

K8S安装部署指南

K8S安装部署指南
K8S全名kubernetes,因首尾字母中间有8个字母,简写为K8S。
K8S是docker容器的编排部署工具,目标是让部署容器化应用更简单高效,提供应用部署、规划、更新、维护的一组机制。最新稳定版本1.37.1
源码地址:https://github.com/kubernetes/kubernetes
K8S功能包括:自动装箱/自动修复/水平扩展/服务发现/滚动更新/版本回退/密钥和配置管理/存储编排
自动装箱:基于容器对应用运行环境的资源配置要求,自动部署应用容器
自动修复:启动失败自动重启/Node故障重新部署和调度/容器健康检查失败自动关闭
水平扩展:通过简单命令、UI界面或资源使用情况对应用进行扩容或缩减
服务发现:用户不需要使用额外的服务发现机制,能够基于K8S能力实现服务发现和负载均衡
滚动更新:根据应用的变化,对容器运行的应用进行一次性或批量更新
版本回退:根据应用部署情况,对应用容器中运行的应用进行历史版本的即时回退
密钥和配置管理:不需要重新构建镜像即可部署和更新密钥和应用配置,类似热部署
存储编排:自动实现存储系统(本地目录/NFS/Gluster/Ceph/Cinder)挂载和应用,对有状态应用实现数据持久化很重要
支持Node数:2000台
支持Pod数:150000个
K8S架构
MasterNode:集群控制节点,对集群进行调度管理,接受管理员对集群进行操作,由ApiServer、Scheduler、ClusterStateStore和ControllerManager组成。
WorkerNode:工作节点,运行容器,由kubelet、kubeproxy和container runtime组成。
部署步骤
安装软件清单:kubeadm、kubectl、kubelet
初始化集群
添加node到集群
生成证书
*集群管理应用以容器形式运行在masterNode
主机准备
配置hostname
hostname set-hostname Name
如ip设置是dhcp分配或未分配,需规划ip地址,使用静态IP,配置子网掩码和网关,确保能够访问公网以及暴露端口能够被访问。
修改/etc/hosts
ip masterip worker1ip worker2....
主机配置
关闭防火墙
systemctl stop firewalldsystemctl disable firewalldfirewall-cmd --state //测试防火墙状态
关闭selinux
set -ri 's/SELINUX=enforing/SELINUX=disabled/' /etc/selinux/configrebootgetenforce //验证是否关闭
时钟同步
yum install ntpdate //centos7或rhel7支持crontab -l0 */1 * * * ntpdate time1.aliyun.comyum install chrony //centos8或rhel8及更高版本支持vim /etc/chrony.confserver time1.aliyun.com minpoll 4 maxpoll 10 iburst// minpoll 4=2^4(s) , maxpoll 10=2^10(s) iburst=启动或重连时连续4次同步
关闭swap分区
//使用kubeadm必须关闭swap分区vim /etc/fstab# /dev/mapper/centos-swap swap //注释此行关闭swap分区
添加网桥过滤
// 加载内核modprobe overlaymodprobe br_netfilter// 开机启动cat > /etc/modules-load/k8s.conf <<EOFoverlaybr_netfilterEOF// 写入内核参数cat > /etc/systcl.d/k8s.conf <<EOFnet.bridge.bridge-nf-call-ip6tables=1net.bridge.bridge-nf-call-iptables=1net.ipv4.ip_forward=1vm.swappiness=0EOF//应用并验证sysctl -p /etc/sysctl.d/k8s.confsysctl --systemlsmod | grep br_netfiltersysctl net.bridge.bridge-nf-call-iptablessysctl net.ipv4.ip_forward
开启ipvs(Linux 内核内置的四层(L4)负载均衡器)
yum install ipset ipvsadmcat > /etc/sysconfig/modules/ipvs.modules <<EOF#!/bin/bashmodprobe --ip_vsmodprobe --ip_vs_rrmodprobe --ip_vs_wrrmodprobe --ip_vs_shmodprobe --nf_conntrack_ipv4EOFchmod 755 /etc/sysconfig/modules/ipvs.modulesbash /etc/sysconfig/modules/ipvs.moduleslsmod | grep -e ip_vs -e nf_conntrack_ipv4
在全部节点安装docker
//获取源wget -o /etc/yum.repo.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum install -y docker-ce docker-ce-cli containerd.iosystemctl start docker && systemctl enable docker
配置docker
mkdir /etc/dockercat > /etc/docker/daemon.json <<EOF{  "exec-opts": ["native.cgroupdriver=systemd"],  "log-driver": "json-file",  "log-opts": {"max-size": "100m", "max-file": "3"},  "registry-mirrors": ["https://registry.cn-hangzhou.aliyuncs.com"]}EOFsystemctl daemon-reload && systemctl restart dockerdocker info | grep -i cgroup
安装kubeadm kubelet kubectl
//安装yum源vim /etc/yum.reps.d/k8s.repo[kubernetes]name=kubernetesenabled=1baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/gpgcheck=1gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpgyum install kubeadm kubelet kubectl
kubelet配置
vim /etc/sysconfig/kubeletKUBELET_EXTRA_ARGS="--cgroup-driver=systemd"// 开机启动systemctl enable kubelet
准备镜像
//查看镜像列表kubeadm config images list
// 导出镜像清单kubeadm config images list >> image.list// 编写脚本批量下载镜像cat image.pull.sh#!/bin/bashimagelist='...镜像清单,一行一条...'for img in $imagelistdo  docker pull $imgdonechmod 775 image.pull.shsh image.pull.sh
在workerNode导入镜像
//MasterNode导出镜像docker save -o kube-proxy.tar k8s.gcr.io/kube-proxy:versiondocker save -o pause.tar k8s.gcr.io/pause:versionscp kube-proxy.tar pause.tar workerNode:/目标路径//WorkerNode导入镜像docker load - i *.tar 
集群初始化
//只在MasterNode进行kubeadm init     --kubernetes-version=v1.36.2     --image-repository registry.aliyuncs.com/google_containers    --apiserver-advertise-address=<master内网IP>    --pod-network-cidr=<pod网段>    --cri-socket /run/containerd/containerd.sock
//完成后mkdir -p $HOME/.kubecp -i /etc/kubernetes/admin.conf $HOME/.kube/configchown $(id -u):$(id -g) $HOME/.kube/config //这一句可以不做
安装网络插件
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.28/manifests/calico.yaml
查看workerNode加入MasterNode命令
//这个命令在kubeadmin init完成时会输出一遍,以后增加workerNode执行下面命令可重新输出kubeadm token create --print-join-command
workerNode加入MasterNode
kubeadm join <masterIP>:<port> --token .... --discovery-token-ca-cart-hash sha256:...

相关学习资料