【k8s第二步】Kubernetes-Kubeadm部署安装【已修正错误】
⒈开启kube-proxy的ipvs的前置条件
模式改为lvs调度的方式,kube-proxy主要解决的是svc(service)与pod之间的调度关系,ipvs的调度方式可以极大的增加它的访问效率,所以这种方式现在是我们必备的一种。
1.加载netfilter模块
modprobe br_netfilter
2.编写一个引导文件,这个文件将会引导我们lvs的一些相关依赖的加载,注意这里的依赖并不是rpm包含,也是模块依赖
cat > /etc/sysconfig/modules/ipvs.modules <<EOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF
3.赋予该文件755权限并执行该文件,然后使用lsmod命令查看这些文件是否被引导。
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
⒉安装Docker
1.安装Docker相关依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
2.导入阿里云Docker-ce的镜像仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.更新yum并安装Docker-ce
yum update -y && yum install -y docker-ce
4.重启
reboot
重启完成后我们之前在Centos设置默认的启动内核4.44将被恢复默认到3.10,因此我们需要再次设置一次并重启
grub2-set-default 'CentoS Linux(4.4.189-1.el7.elrepo.×86_64) 7 (Core)' && reboot
查看当前使用的内核
uname -r
5.启动Docker并设置为开机自启
systemctl start docker
systemctl enable docker
6.配置daemon文件
- exec-opts,设置默认的组为systemd,默认情况下Centos有两个组,一个fs,一个systemd管理的,为了统一化,我们交给systemd管理。
- log-driver,让我们存储日志的方式改为json文件的形式
- log-opts,存储最大为100Mb,这样我们可以在后期通过war/log/content/去查找对应的容器的日志信息,这样就可以在EFK里去搜索对应的信息
- registry-mirrors,设置Docker镜像加速
7.创建存储Docker配置文件的目录
mkdir -p /etc/systemd/system/docker.service.d
8.重新读取配置文件并重启Docker
systemctl daemon-reload && systemctl restart docker && systemctl enable docker
⒊安装Kubeadm(主从配置)
1.导入阿里云yum仓库
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=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
2.安装kubeadm初始化工具,命令行管理工具,Docker交互工具
yum -y install kubeadm-1.16.3 kubectl-1.16.3 kubelet-1.16.3
3.设置kubelet开机自启
systemctl enable kubelet.service
因为kubelet需要跟我们的容器接口进行交互,启动我们的容器,而我们的k8s通过kubeadm安装出来以后都是以pod的方式存在,也就是底层是以容器的方式运行,所以kubelet一定要是开机自启的,不然的话,重启以后k8s集群不会启动。
⒋初始化k8s主节点
1.导入镜像
初始化之前需要导入镜像
kubeadm在初始化k8s集群的时候,会从GCE【谷歌云服务器】里去拉取镜像,并且这些镜像是相当大的,而且速度比较慢,最重要的是,萌新一般都会404,因此我们直接导入离线的镜像。
ⅰ导入镜像
拖动到虚拟机里会不会啊
ⅱ解压镜像
tar -zxvf kubeadm-basic.images.tar.gz
ⅲ编写脚本批量导入镜像
vim load-images.sh
#!/bin/bash ls /root/kubeadm-basic.images > /tmp/image-list.txt cd /root/kubeadm-basic.images for i in $( cat /tmp/image-list.txt ) do docker load -i $i done rm -rf /tmp/image-list.txt
chmod a+x load-images.sh
./load-images.sh
ⅳ将解压后的镜像及脚本复制到其他节点上
scp -r kubeadm-basic.images load-images.sh root@k8s-node01:/root/
2.开始初始化【这些命令应运行在主节点上】
通过如下指令创建默认的kubeadm-config.yaml文件:
kubeadm config print init-defaults > kubeadm-config.yaml
kubeadm-config.yaml组成部署说明:
- InitConfiguration: 用于定义一些初始化配置,如初始化使用的token以及apiserver地址等
- ClusterConfiguration:用于定义apiserver、etcd、network、scheduler、controller-manager等master组件相关配置项
- KubeletConfiguration:用于定义kubelet组件相关的配置项
- KubeProxyConfiguration:用于定义kube-proxy组件相关的配置项
可以看到,在默认的kubeadm-config.yaml文件中只有InitConfiguration、ClusterConfiguration 两部分。我们可以通过如下操作生成另外两部分的示例文件:
# 生成KubeletConfiguration示例文件 kubeadm config print init-defaults --component-configs KubeletConfiguration # 生成KubeProxyConfiguration示例文件 kubeadm config print init-defaults --component-configs KubeProxyConfiguration
关于kubeadm-config.yaml更多配置语法参考: https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2 使用kubeadm-config.yaml配置主节点:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/control-plane-flags/ kube-proxy开启ipvs参考: https://github.com/kubernetes/kubernetes/blob/master/pkg/proxy/ipvs/README.md kubelet的配置示例参考: https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/kubelet-integration/#configure-kubelets-using-kubeadm
ⅰ显示init默认的初始化文件并打印到kubeadm-config.yaml文件中,这样就拿到了kubeadm默认的初始化模板
kubeadm config print init-defaults > kubeadm-config.yaml
ⅱ查看并修改kubeadm-config.yaml文件
vim kubeadm-config.yaml
SupportIPVSProxyMode
设置为true,因此高版本中此部分可省略
。github文档:https://github.com/kubernetes/kubernetes/blob/master/pkg/proxy/ipvs/README.md】ⅲ开始进行初始化
#使用指定的yaml文件进行初始化安装 自动颁发证书(1.13后支持) 把所有的信息都写入到 kubeadm-init.log中 kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log
kubeadm init --config=kubeadm-config.yaml --upload-certs | tee kubeadm-init.log
--experimental-upload-certs已被弃用,官方推荐使用--upload-certs替代,官方公告:https://v1-15.docs.kubernetes.io/docs/setup/release/notes/
ⅳ通过初始化日志查看初始化过程中的信息
vim kubeadm-init.log
*日志信息一般有以下几点:
1.最开始告诉我们kubernetes的版本 2.检测当前运行环境 3.为k8s集群下载镜像【时间很长,镜像需要从Google GCE下载】 4.开始安装镜像 5.在/var/lib/kubelet/kubeadm-flags.env文件中保存了kubelet环境变量 6.在/var/lib/kubelet/config.yaml文件中保存了kubelet配置文件 7.在/etc/kubernetes/pki目录中保存了k8s所使用的所有的证书,因为k8s采用了http协议进行的C/S结构的开发,它为了安全性考虑在所有的组件通讯的时候采用的是https的双向认证的方案,所以k8s需要大量的CE证书以及私钥密钥 8.配置DNS以及当前默认的域名【svc(service)的默认名称】 9.生成k8s组件的密钥 10。指定DNS的名称及地址 11.在/etc/kubernetes目录下生成k8s组件的配置文件 12.RBAC授权 13.初始化成功
ⅴ初始化完成后需要的工作
在当前的用户的Home目录下创建.kube目录(这个目录中保存我们的连接配置,kubectl和kubeApi进行https通讯,所以有一些缓存需要保存以及一些认证文件)
mkdir -p $HOME/.kube
拷贝集群管理员的配置文件到这个目录下
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
授予权限(所有者 所有组授予当前的用户)
sudo chown $(id -u):$(id -g) $HOME/.kube/config
查看k8s节点状态
kubectl get node
此时主节点状态为NotReady,因为k8s需要扁平化的网络,此时k8s中还没有构建flannel网络插件
ⅵ安装flannel网络插件
下载flannel yaml文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
创建flannel
kubectl create -f kube-flannel.yml
查看flannel是否部署成功【系统组件默认在kube-system命名空间下】,同样使用ifconfig也可以看到flannel
kubectl get pod -n kube-system
此时查看node状态应该为Ready状态
ⅶ将k8s子节点加入到k8s主节点【命令在vim kubeadm-init.log中】,该命令在子节点运行
**如果子节点在加入主节点之前未导入镜像,建议在加入主节点之前导入镜像或执行以下命令下载镜像
kubeadm config images pull
将k8s子节点加入到k8s主节点
kubeadm join masterIp:masterPort --token xxx
此时查看node节点应该有3个,但子节点状态为notReady,等待子节点的flannel初始化完成即可。
*如果子节点执行加入主节点的命令报错的话,可以尝试执行kubeadm reset命令后重试
作者:奇
出处:https://www.cnblogs.com/fanqisoft/p/11498217.html
版权:本作品采用「本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!