
#云原生征文#kubeadm部署一主两从的kubernetes集群 原创 精华
kubernetes集群大体上分为两类:一主多从和多主多从。
一主多从:一台Master节点和多台Node节点,搭建简单,但是有单机故障风险,适合用于测试环境
多主多从:多台Master节点和多台Node节点,搭建麻烦,适合用于生产环境
本文采用kubeadm部署一主两从的kubernetes集群,供测试使用,并包含了网络插件和一个简单nginx服务部署的例子
一、禁用swap分区
swap分区指的是虚拟内存分区,它的作用是在物理内存使用完毕后,将磁盘空间虚拟成内存来使用
启动swap设备会对系统的性能产生非常负面的影响,这里把swap分区关闭
注释掉最后一行
二、安装docker(三个节点)
1.切换镜像源
2.查看前镜像源中支持的docker版本
3.安装指定版本docker(带上–setopt=obsoletes=0,使用指定版本)
4.添加配置文件
Docker在默认情况下使用的Cgroup Driver为cgroupfs,而kubernetes推荐使用systemd来代替cgroupfs
5.启动docker
三、安装kubernetes组件(三个节点)
1.配置镜像源
2.安装指定版本的kubeadm,kubelet和kubectl
3.修改/etc/sysconfig/kubelet的内容,将里边内容替换
4.设置kubelet开机自启
四、准备集群镜像
这步是为第五步的kubeadm init做准备,因为init会拉取镜像,而此镜像在kubernetes的仓库中,由于网络原因,无法连接,因此用如下方法
添加内容
五、集群初始化(主节点)
1.主节点创建集群
记录下最后结尾的几个命令
如果初始化失败了,使用如下命令清理环境,并重新初始化
kubeadm reset
rm -rf $HOME/.kube
systemctl restart kubelet
2.创建必要文件
六、备机初始化
使用kubeadm init 结尾提示的kubeadm join语句初始化备机,如果忘记kubeadm join语句可以通过如下命令在主节点获取join命令参数:
在两个备机执行改语句,加入集群,结果如下:
提示在control-plane执行kubectl get nodes查看节点状态,即在主节点执行,发现节点的status都是NotReady的状态,这是因为没有安装网络插件的原因。
七、安装网络插件——calico
kubernetes支持多种网络插件,比如flannel、calica、canal等等,任选一种使用即可,本次选择calico。
网络插件没有安装的话,节点是 <font color=“#dd00dd”>NotReady</font> 状态,因为CoreDNS没有网络插件分配不到IP地址,会一直处于Pending状态
如果没有这个插件,kubedns无法启动,pod之间就无法通信。
<font color=“#dd00dd”>只在主节点执行即可,插件使用的是DaemonSet的控制器,它会在每个节点上都运行。</font><br />
1.获取配置文件并apply
curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O
2.查看服务状态,都是running了
再次查看节点状态,发现所有的节点都是 <font color=“#dd00dd”>Ready</font> 的状态了
八、部署CoreDNS
用命令查看状态,发现pod处于ContainerCreating状态
使用kubectl describe查看该coredns的pod,发现在拉取coredns的镜像,稍微等待一会。
等待一会后查看events,发现终于拉取成功了
查看pod和svc状态,都是running的
九、kubernetes-dashboard的部署
1.获取yaml文件
2.增加配置,使Dashboard暴露到外部
因为默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部
3.apply修改后的recommended.yaml
4.查看kubernetes-dashboard的pod状态,都已经是running的
5.访问网址
https://NodeIP:30001
我的主节点地址为172.20.10.6,因此访问https://172.20.10.6:30001
6.创建service account并绑定默认cluster-admin管理员集群角色:
创建用户
用户授权
获取用户Token
7.使用输出的token登录Dashboard。
可以查看当前k8s的相关信息,例如nodes,namespace等
十、使用k8s简单部署一个nginx
1.根据yaml创建namespace
创建namespace
查询namespace
2.创建pod
一般不直接create pod,而是通过controller来创建pod。deployment为其中一种controller
拉取nginx镜像
编辑pod的yaml文件
内容如下
创建
查询
nginx-deployment 部署的2个 pod 全部成功
查看两个nginx分配的ip
访问测试
3.创建service
创建对应yaml文件
内容如下
创建service
查看service
访问测试
4.暴露端口部署nginx服务
nginx-service.yaml文件如下
部署服务
查看服务和端口
测试如下
浏览器用主节点所在的ip访问k8s的nginx,我的主节点ip为172.20.10.6,则访问http://172.20.10.6:31090/,结果如下
【本文正在参加云原生有奖征文活动】,活动链接:https://ost.51cto.com/posts/12598”
