一、概述
手工搭建 Kubernetes 集群是一件很繁琐的事情,为了简化这些操作,就产生了很多安装配置工具,如 Kubeadm
,Kubespray,RKE 等组件,我最终选择了官方的 Kubeadm 主要是不同的 Kubernetes 版本都有一些差异,Kubeadm
更新与支持的会好一些。Kubeadm 是 Kubernetes 官方提供的快速安装和初始化 Kubernetes
集群的工具,目前的还处于孵化开发状态,跟随 Kubernetes 每个新版本的发布都会同步更新,
强烈建议先看下官方的文档了解下各个组件与对象的作用。
https://kubernetes.io/docs/concepts/
https://kubernetes.io/docs/setup/independent/install-kubeadm/
https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
在创建Kubernetes集群时,阿里云容器服务提供两种网络插件:Terway和Flannel。
Flannel:使用的是简单稳定的社区的Flannel CNI 插件,配合阿里云的VPC的高速网络,能给集群高性能和稳定的容器网络体验,但功能偏简单,支持的特性少,例如:不支持基于Kubernetes标准的Network Policy。
Terway:是阿里云容器服务自研的网络插件,将阿里云的弹性网卡分配给容器,支持基于Kubernetes标准的NetworkPolicy来定义容器间的访问策略,支持对单个容器做带宽的限流。对于不需要使用Network
Policy的用户,可以选择Flannel,其他情况建议选择Terway。
因此,本文主要介绍flannel的简单使用。
系统
内核
docker
ip
主机名
配置
centos 7.6
3.10.0-957.el7.x86_64
19.03.5
192.168.128.130
k8s-master
2核4G
192.168.128.131
k8s-node01
192.168.128.132
k8s-node02
注意:请确保CPU至少2核,内存2G
二、准备工作
如果各个主机启用了防火墙,需要开放Kubernetes各个组件所需要的端口,可以查看Installing kubeadm中的”Check required ports”一节。 这里简单起见在各节点禁用防火墙:
修改 <code>/etc/fstab</code> 文件,注释掉 SWAP 的自动挂载(永久关闭swap,重启后生效)
安装docker
这里就不再叙述了,请参考链接:
https://www.cnblogs.com/xiao987334176/p/11771657.html
修改主机名
注意:主机名不能带下划线,只能带中划线
否则安装k8s会报错
三、安装kubeadm,kubelet,kubectl
在各节点安装kubeadm,kubelet,kubectl
目前最新版本是:1.18.1
以上,就是master和node都需要操作的部分。
四、初始化Master节点
注意修改apiserver-advertise-address为master节点ip
参数解释:
这一步很关键,由于kubeadm 默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过–image-repository指定阿里云镜像仓库地址
集群初始化成功后返回如下信息:
记录生成的最后部分内容,此内容需要在其它节点加入Kubernetes集群时执行。
输出如下:
注意保持好kubeadm join,后面会用到的。
如果yml中的"Network": "10.244.0.0/16"和kubeadm init xxx --pod-network-cidr不一样,就需要修改成一样的。不然可能会使得Node间Cluster IP不通。
由于我上面的kubeadm init xxx --pod-network-cidr就是10.244.0.0/16。所以此yaml文件就不需要更改了。
查看yaml需要的镜像
注意:这些镜像都是需要访问谷歌才行的。
但是阿里云容器镜像服务ACR里面是有的,访问链接如下:
注意:必须使用阿里云账号登录才行。
点击管理控制台
点击左侧的镜像搜索
输入关键字:flannel:v0.12.0-amd64,选择第二个。
点击复制公网地址
由于我这里是上海区域,所以域名是:registry.cn-shanghai。如果你选的是其他区域,域名也会不一样。
下面就是我们需要的版本号。
那么下载镜像的完整命令为:
其他镜像,也都在这里。
所以,所需要的镜像下载命令为:
为镜像打tag,保持和yaml文件一样。
注意:这些镜像,也需要在node节点执行。
加载flannel
等待几分钟,确保所有的Pod都处于Running状态
注意:coredns容器的网段是10.244.0.0/16
设置开机启动
(仅master)
必须退出一次,再次登录,就可以了
五、node加入集群
请查看上文中的准备工作,确保都执行了!!!
修改主机名部分,改为k8s-node01
登录到node节点,确保已经安装了docker和kubeadm,kubelet,kubectl
登录到master,使用命令查看
登录到node节点,查看ip
它会创建一个flannel.1网卡,用来做flannel网络通信的。
七、使用yml发布应用
以flaskapp为例子
flaskapp-deployment.yaml
flaskapp-service.yaml
加载yml文件
查看pod状态
等待几分钟,确保为Running状态
ping pod ip
确保能正常ping通,表示flannel网络正常。
使用master ip+nodeport访问
效果如下:
注意:使用node节点ip+nodeport也可以访问。