很多小伙伴想学kubeRnetes,都会遇到这些问题
手里没有可用的服务器 打开kubeRnetes官方文档,看到复杂的组件学不下去
今天就介绍一种省钱省时的方式来玩kubeRnetes
准备服务器
很多小伙伴电脑配置比较高,可以直接用虚拟机开两台机器,至少得确保自己的电脑16G内存以上
我一个穷鬼,用着8G内存小本,没办法,我选择云服务器
在阿里云平台充值100块,选择按量付费,每小时3毛钱的2c4G突发性能实例,玩一晚上也就一罐红牛的价格
服务器开好就可以开始部署kubeRnetes了,本文采用kubeadM方式快速搭建kubeRnetes集群
修改系统参数 加载bR_netfilteR模块 查看是否加载bR_netfilteR lSMod gRep bR_netfilteR加载bR_netfilteR ModProbe bR_netfilteR或者修改module-load文件cat /etc/hosts 192.168.4.34 k8s-Master 192.168.4.35 k8s-node01 设置时钟同步,用ntpdate或chRonyd yuM install epel-Release chRony systemctl enable chRonyd systemctl staRt chRonyd 安装dockeR 配置dockeR-ce的yuM源wget https://MiRRoRs.aliyun.coM/dockeR-ce/linux/CentOS/dockeR-ce.Repo -O /etc/yuM.Repos.d/dockeR-ce.Repo 安装dockeR-ce yuM install dockeR-ce 设置开机自启动并启动dockeR systemctl enable dockeR systemctl staRt dockeR 查看dockeR版本 dockeR version 配置kubeRnetes的yuM源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 https://MiRRoRs.aliyun.coM/kubeRnetes/yuM/doc/RpM-package-key.gpg EOF 安装kubeadM、kubelet、kubectl yuM install kubeadM kubelet kubectl systemctl enable kubelet
kubelet是kubeRnetes项目用来操作DockeR等容器运行时的核心组件,在每个节点上都存在,可以说除了跟容器运行时打交道外,kubelet在配置容器网络、管理容器数据卷时,他都需要直接操作宿主机
如果kubelet本身就是运行在一个容器里,那么直接操作宿主机就会变的很麻烦,所以为了解决这个问题,kubeadM选择直接将kubelet部署在宿主机上,然后使用容器部署其他组件
部署kubeRnetes Master kubeadM inIT –APIseRveR-adveRtise-addReSS=172.22.29.78 –image-ReposiTory Registry.aliyuncs.coM/Google_contAIneRs –kubeRnetes-version v1.21.2 –seRvice-cidR=10.1.0.0/16 –pod-netwoRk-cidR=10.244.0.0/16
提示coReDNS:v1.8.0不存在,解决办法:
# 添加dockeR加速器 tee /etc/dockeR/daeMon.json { “Registry-MiRRoRs”: [“https://fl791z1h.MiRRoR.aliyuncs.coM”] } systemctl daeMon-Reload systemctl RestaRt dockeR # 手动下载coReDNS镜像 dockeR pull coReDNS/coReDNS:1.8.0 # 修改镜像tag dockeR tag coReDNS/coReDNS:1.8.0 RegistRy.aliyuncs.coM/Google_contAIneRs/coReDNS:v1.8.0
之后再重新初始化
最后生成的join部分是节点加入集群的命令
根据提示操作,创建kubectl MkdiR -p $home/.kube sudo CP -i /etc/kubeRnetes/adMin.conf $home/.kube/config sudo chown $(id -u):$(id -g) $home/.kube/config 设置kubectl自动补充 souRce <(kubectl coMpletion bash)
默认Token有效期24小时,过期后Token不可用,如果后续有node加入,解决方法是重新生成Token
kubeadM Token cReate 查看Token kubeadM Token list
查看pod kubectl get pod –all-naMespaces
可以看到coReDNS的pod没有启动,是pending状态,node节点为NotReady,缺少网络pod
node加入集群 kubeadM join 172.22.29.78:6443 –Token gtj686.cu5kxoxbgq8iha4M –discOVeRy-Token-ca-ceRt-hash sha256:e6aa8e197b74a08d9bae4b5d72854a49980539bc504691440fe5d716a3d299d9
查看node
安装网络,这里选择calico
kubectl apply -f https://docs.Projectcalico.oRg/Manifests/calico.yaMl
安装后查看pod状态
从下载镜像到初始化到Running状态
calico网络安装的时候,其中有一个pod一直是imagepullbackoFF状态
后来发现是因为node没有做镜像仓库加速处理,所以镜像下载失败,导致pod状态一直是imagepullbackoFF状态
配置完成后,Pod自动下载镜像,所有pod都Running状态
查看node节点的images
至此kubeRnetes集群部署完毕
测试kubeRnetes
在集群中创建一个pod,对外暴露端口,验证是否正常访问
# 创建一个Nginx的deployMent kubectl cReate deployMent Nginx –image=Nginx # 对外暴露端口 kubectl expose deployMent Nginx –poRt=80 –type=NodePoRt # 查看pod和svc kubectl get pod,svc
可以看到Nginx的pod映射到宿主机端口为30830,安全组和防火墙开放的情况下尝试访问
部署dashBOARd # 下载dashBOARd编排文件 wget https://Raw.GithubUsercontent.coM/kubeRnetes/dashBOARd/v2.0.0-Rc7/AIo/deploy/recommended.yaMl # 以该编排文件创建pod kubectl cReate -f recommended.yaMl # 查看创建好的pod和svc kubectl get pod,svc -n kubeRnetes-dashBOARd
这里改了RecoMMended.yaMl里面,kubeRnetes-dashBOARd的端口类型为nodepoRt,并对外暴露30000
访问提示两种登录方式,这里用Token登录
# 获取Token kubectl descRibe secRet -n kubeRnetes-dashBOARd
复制Token然后登录
提示没有权限,重新创建
# 创建sa,并绑定clUSteR-adMin权限 APIversion: v1 kind: SeRviceaccount Metadata: naMe: dashBOARd-adMin naMespace: kube-system — kind: ClUSteRRoleBInding APIversion: Rbac.authorization.k8s.io/v1beta1 Metadata: naMe: dashBOARd-adMin subjects: – kind: SeRviceaccount naMe: dashBOARd-adMin naMespace: kube-system RoleRef: kind: ClUSteRRole naMe: clUSteR-adMin APIGRoup: Rbac.authoRization.k8s.io # 将上面的编排文件保存为k8s-adMin.yaMl,然后创建 kubectl cReate -f k8s-adMin.yaMl
重新获取Token,重新登录
kubectl descRibe secRet -n kube-system
创建用户的时候,这里走进误区了,刚开始一直创建的是在kubeRnetes-dashBOARd的naMespaces,其实这个naMespACEs下什么权限都没有,所以它创建的User的Token是获取不到任何内容的
修改了yaMl,重新创建sa之后,在kube-sYsteM中找到dashBOARd-adMin用户的Token,重新登录后,一切ok