先上简介,这篇介绍了k8s的各个组件之间的概念及相关关系,明白这些对后面掌握k8s这个工具有极大好处
主机信息,本文用win10用hyper-v配置三台虚拟机
主机ip | 角色 | 部署内容 |
---|---|---|
192.168.43.10 | master | etcd、kube-apiserver、kube-controller-manager、kube-scheduler |
192.168.43.11 | node | kube-proxy,kubelet,docker,flanneld |
192.168.43.12 | node | kube-proxy,kubelet,docker,flanneld |
用hyper-v部署完后配置静态ip,配置注意点:
hyper是windows系统自带的虚拟机,创建centos虚拟机后设置固定ip,除了需要给虚拟机搭配物理网卡外还需要设置虚拟机的host重启:这里卡的比较久,重点记录
hyper-v
/etc/sysconfig/network-scripts/ifcfg-eth0
文件BOOTPROTO=static
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.43.10
GATEWAY=192.168.43.1
DNS1=192.168.43.1
NETMASK=255.255.255.0
如果有引号,则去掉引号即可
可能出现的问题:Network is unreachable
解决方案:https://cloud.tencent.com/developer/article/1334254
如果想要了解原理可以看这篇文章
最后可以看到用无线网卡配置成功的网络配置图
虚拟机可以链接外网之后下一步就是集群部署k8s
网上集群部署k8s的方式很多
我是按照这篇文章进行部署可以成功可查看
总结一下:
关闭三台虚拟机的防火墙
systemctl disable firewalld.service
systemctl stop firewalld.service
设置三台虚拟机的机器名,将各自的host对应的ip存放到每台虚拟机的/etc/hosts
文件
hostnamectl --static set-hostname Master
hostnamectl --static set-hostname node1
hostnamectl --static set-hostname node2
echo '192.168.43.10 master
192.168.43.10 etcd
192.168.43.10 registry
192.168.43.11 node1
192.168.43.12 node2' >> /etc/hosts
上面是每台虚拟机都要执行的命令,后面是针对master和node执行的命令
master
安装master所需的软件
yum -y install etcd kubernetes-master
配置好各个文件后设置 etcd kube-apiserver kube-controller-manager kube-scheduler
各个服务为开机自启动,执行完下面命令后确保每个服务都启动成功,不然后面部署完node之后拿不到各个节点的信息
for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do systemctl restart $SERVICES;systemctl enable $SERVICES;systemctl status $SERVICES ; done
最后在master虚拟机上的etcd服务设置flannel服务
etcdctl mk /atomic.io/network/config '{"Network":"192.168.0.0/16"}'
配置完文件及执行完命令后开始node配置
node安装的软件
yum -y install flannel kubernetes-node
下载完成这些软件后配置相关工具的文件
然后设置kube-proxy kubelet docker flanneld
为开机自启动,执行命令
for SERVICES in kube-proxy kubelet docker flanneld;do systemctl restart $SERVICES;systemctl enable $SERVICES;systemctl status $SERVICES; done
执行完此条命令后,集群算是部署完成了,一定要看各个服务是否报错
检查集群是否部署成功,在master服务器执行命令
kubectl get node
如果显示了各个node则部署成功
上述只是手动配置各个服务器配置文件及设置各个服务开机自启动的方式,但是k8s可以自动部署node,所以这就需要用到脚本进行部署
具体可以参考这篇blog
在安装docker成功之后,测试docker安装是否成功,执行 docker run hello-world ,执行该命令报错
可能是权限问题,可能是下载images镜像问题,也可能是docker和ademon进程不能通信报错
安装docker 镜像报错:
Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
解决方案:该方案阐述了下载镜像出现该问题的可能性及对应解决方案
在下载k8s后,设置etcd网络,这里执行的命令
etcdctl -C 192.168.1.165:2379 set /atomic.io/network/config '{"Network":"ip/16"}
报错:
parse 192.168.1.165:2379: first path segment in URL cannot contain colon
解决方案
etcdctl -C http://127.0.0.1:2379 set /atomic.io/network/config '{"Network":"10.1.0.0/16"}'
输入该命令后输出:{“Network”:“10.1.0.0/16”}
完成到这一步就可以部署好k8s,将docker部署在对应的k8s节点就可访问