#yyds干货盘点#快速搭建k8s集群

网友投稿 255 2022-09-12

#yyds干货盘点#快速搭建k8s集群

1.选好作为k8s节点的主机

虚拟机跟物理机都可以

     ip

       name

     node

    192.168.11.1

k8s-master

    master

    192.168.11.2

k8s-node01

     node

    192.168.11.3

k8s-node02

     node

192.168.11.1 k8s-master 192.168.11.1 k8s-node01 192.168.11.3 k8s-node02 echo "192.168.11.1 k8s-master" >> /etc/hosts && echo "192.168.11.2 k8s-node01" >> /etc/hosts && echo "192.168.11.3 k8s-node01" >> /etc/hosts 这里选三台机器作为k8s集群的节点 修改hostname 三台机器对应修改//脚本也有修改 hostnamectl set-hostname k8s-master

2.修改node脚本文件

install-node.sh (​每个节点都需要执行​)

#!/bin/sh##### 在 master 节点和 worker 节点都要执行 【所有机器执行】# 加载环境变量. /etc/profile. /etc/bashrc##################################修改主机名称hostnamectl set-hostname k8s-master#hostnamectl set-hostname k8s-node01#hostnamectl set-hostname k8s-node02################################################ 添加主机名与IP对应关系(每台主机必须设置主机名)# 如下命令:没有则添加信息 若使用请根据自身主机情况修改 ★★★★★ 「你需要修改处」grep '192.168.63.10.*k8s-master' /etc/hosts || echo "192.168.63.10 k8s-master" >> /etc/hostsgrep '192.168.63.2.*k8s-node01' /etc/hosts || echo "192.168.63.2 k8s-node01" >> /etc/hostsgrep '192.168.63.3.*k8s-node02' /etc/hosts || echo "192.168.63.3 k8s-node02" >> /etc/hosts################################################ 必要的基础配置或包安装## 必须安装 nfs-utils 才能挂载 nfs 网络存储yum install -y nfs-utils## wget 用于下载文件yum install -y wget## 其他必要包yum install -y conntrack ipvsadm ipset# 关闭 防火墙systemctl stop firewalldsystemctl disable firewalldsystemctl stop iptablessystemctl disable iptables# 关闭 SeLinuxsetenforce 0sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config# 关闭 swap , 本次涉及的机器没有swap,因此注释了## 如果有swap分区则放开注释swapoff -ayes | cp /etc/fstab /etc/fstab_bakcat /etc/fstab_bak | grep -v swap > /etc/fstab# 时间设置## 时区设置:东八区,上海ls -l /etc/localtime | grep 'Asia/Shanghai' || (rm -f /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime)## 时间同步定时任务:没有则添加定,进行时间同步crontab -l | grep 'ntpdate' || echo -e "# time sync\n*/10 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1" >> /var/spool/cron/root## 查看硬件时间 hwclock --show## 系统时间同步到硬件时间hwclock --systohc# 关闭邮件服务systemctl stop postfix.service && systemctl disable postfix.service################################################ 修改 /etc/sysctl.conf# 开启 ip_forward 转发并解决流量路由不正确问题# 如果有配置,则修改sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward = 1#g" /etc/sysctl.confsed -i "s#^net.ipv4.tcp_tw_recycle.*#net.ipv4.tcp_tw_recycle = 0#g" /etc/sysctl.confsed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables = 1#g" /etc/sysctl.confsed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables = 1#g" /etc/sysctl.conf# IPv6 转发sed -i "s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding = 1#g" /etc/sysctl.confsed -i "s#^net.netfilter.nf_conntrack_max.*#net.netfilter.nf_conntrack_max = 2310720#g" /etc/sysctl.conf## 如下两条非必要sed -i "s#^fs.file-max.*#fs.file-max = 52706963#g" /etc/sysctl.confsed -i "s#^fs.nr_open.*#fs.nr_open = 52706963#g" /etc/sysctl.conf# 如果没有,追加grep 'net.ipv4.ip_forward = 1' /etc/sysctl.conf || echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.confgrep 'net.ipv4.tcp_tw_recycle = 0' /etc/sysctl.conf || echo "net.ipv4.tcp_tw_recycle = 0" >> /etc/sysctl.confgrep 'net.bridge.bridge-nf-call-ip6tables = 1' /etc/sysctl.conf || echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.confgrep 'net.bridge.bridge-nf-call-iptables = 1' /etc/sysctl.conf || echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.confgrep 'net.ipv6.conf.all.forwarding = 1' /etc/sysctl.conf || echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.confgrep 'net.netfilter.nf_conntrack_max = 2310720' /etc/sysctl.conf || echo "net.netfilter.nf_conntrack_max = 2310720" >> /etc/sysctl.confgrep 'fs.file-max = 52706963' /etc/sysctl.conf || echo "fs.file-max = 52706963" >> /etc/sysctl.confgrep 'fs.nr_open = 52706963' /etc/sysctl.conf || echo "fs.nr_open = 52706963" >> /etc/sysctl.conf# 执行命令以生效sysctl -p#### 说明:上面的命令中/etc/sysctl.conf可以用/etc/sysctl.d/k8s.conf替换;生效使用sysctl -p /etc/sysctl.d/k8s.conf 命令################################################ kube-proxy 开启ipvs的前置条件【本步骤可忽略,但推荐使用IPVS】modprobe br_netfiltercat > /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.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4################################################ 安装 docker## 参考文档如下# # 卸载旧版本 根据需要放开注释yum remove -y docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-enginerm -rf /etc/systemd/system/docker.service.drm -rf /var/lib/dockerrm -rf /var/run/docker## 设置 docker yum repositoryyum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo 安装docker# yum install -y docker-ceyum -y install docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io## 启动docker服务,这样可以创建/etc/docker目录systemctl start docker## 配置daemon## 1、修改docker Cgroup Driver为systemd;2、日志格式设定## 如果不修改,在添加 worker 节点时可能会碰到如下错误## [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". ## Please follow the guide at > /etc/docker/daemon.json << EOF{ "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors":[" "insecure-registries": ["172.16.2.164:80"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }}EOF## 开机自启动systemctl stop docker && systemctl daemon-reload && systemctl enable docker && systemctl start docker################################################ 配置K8S的yum源cat > /etc/yum.repos.d/kubernetes.repo < /etc/systemd/system/docker.service.d/devicemapper.conf <

对应节点打开备注,这个脚本每个节点都需要修改下面这个是harbor仓库地址

是国内镜像仓库地址出现镜像下载失败可以选择更换仓库地址或者更换镜像版本之后用 docker pull 的方式重试 docker pull  coredns:1.7.0images=(    kube-proxy:v1.19.3    pause:3.2 )node节点只需要这两个镜像,master节点需要所有的镜像,但是都下载下来没有关系

​先确定镜像有没有下载成功​

docker images

缺镜像的话请手动pull 镜像,镜像版本请下载自己需要的

master节点都需要

docker pull kube-apiserver:v1.19.3docker pull kube-controller-manager:v1.19.3docker pull kube-scheduler:v1.19.3docker pull kube-proxy:v1.19.3docker pull pause:3.2docker pull etcd:3.4.13-0docker pull coredns:1.7.0

node节点

docker pull kube-proxy:v1.19.3docker pull pause:3.2

3.修改master脚本

#!/bin/bash##### 在 k8s master 节点执行# 加载环境变量. /etc/profile. /etc/bashrc# kubeadm 初始化##### 初始化方式1# 这个初始化过程需要几分钟,具体时间取决于你的网络。# --apiserver-advertise-address=x.x.x.x 本机内网地址 ★★★★★ 「你需要修改处」# --service-cidr=x.x.x.x 为服务VIP使用可选的IP地址范围。默认10.96.0.0/12# --pod-network-cidr=x.x.x.x 指定pod网络的IP地址范围。kubeadm init \ --apiserver-advertise-address=192.168.22.1 \ --kubernetes-version v1.19.3 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16##### 初始化方式2 【推荐方式】# --upload-certs 自动颁发证书,高可用有意义,单机可选# kubeadm-config.yaml文件,通过上文已得到该文件#kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.logecho "********** kubeadm init OK! **********"# 配置 kubectlmkdir -p $HOME/.kube/cp -i /etc/kubernetes/admin.conf $HOME/.kube/configchown $(id -u):$(id -g) $HOME/.kube/configecho "********** kubectl config OK! **********"################################################ Kubernetes CNI扁平化网络:Flannel、Calico、Canal和Weave# 安装 kube-flannel 网络# 若能够访问到quay.io这个registery,可以注释掉下面3行docker命令。 在 kube-flannel.yml 文件中可得到 flannel 版本信息 # 如果不能访问 quay.io这个registery,那么请使用下面3行#docker pull ${src_registry}/flannel:v0.12.0-amd64#docker tag ${src_registry}/flannel:v0.12.0-amd64 quay.io/coreos/flannel:v0.12.0-amd64#docker rmi ${src_registry}/flannel:v0.12.0-amd64 # 如果下载失败,那么可通过 页面拷贝到本地#wget apply -f kube-flannel.ymlkubectl apply -f calico.yamlecho "********** kube-calico network OK! **********"################################################ master节点验证所有pod状态echo "********** kubectl get pods --all-namespaces -o wide **********"# kubectl get pods -A -o wide # 与下面的命令等效kubectl get pods --all-namespaces -o wide# master节点查看node状态echo "********** kubectl get nodes **********"kubectl get nodesecho "********** 获得 join 命令参数 **********"kubeadm token create --print-join-command————————————————#k8s 命令自动补全yum install -y bash-completion#locate bash_completion /usr/share/bash-completion/bash_completionsource /usr/share/bash-completion/bash_completionsource <(kubectl completion bash)————————————————#备注:安装完成后,在master节点执行kubectl get po -A -o wide#ping 10.244.235.195 (master节点上的pod的IP),查看是否ping的通#查看service: kubectl get svc -n kube-system#ping CLUSTER-IP 查看是否ping的通,#如果svc ip地址 ping 不通,修改kube-system 下的configmap(kube-proxy)#...# kind: KubeProxyConfiguration# metricsBindAddress: ""# mode: "ipvs" #将mode的值修改为ipvs# nodePortAddresses: null# oomScoreAdj: null# portRange: ""# showHiddenMetricsForVersion: ""#...

修改ip

修改对应的ip为master节点ip

master节点执行

kubeadm token create --print-join-command

将输出结果复制到各个node节点

kubeadm join 192.168.55.11:6443 --token n8tku3.caf85w7jaewyi5gl --discovery-token-ca-cert-hash sha256:895a6b14b1304f52534e29481fcce265bde999ec69ba118590586f4d83ae64ee

4.检查集群是否安装成功

kubectl get nodes

kubectl get po -A -o wide

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:关于k8s Pod的自动水平伸缩(HPA)
下一篇:休克文案:步履不停的文案,继续文艺!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~