kubernetes(简称k8s)实践

Linux环境搭建k8s

先上简介,这篇介绍了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

  • hyper-v先在 ***虚拟交换机管理器***新建一个 外部的虚拟交换机
  • 新建虚拟机配置网络的时候选择这个新建的外部 虚拟交换机
  • 虚拟机新建成功之后配置centos里面的/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
如果想要了解原理可以看这篇文章
最后可以看到用无线网卡配置成功的网络配置图
kubernetes(简称k8s)实践_第1张图片
虚拟机可以链接外网之后下一步就是集群部署k8s

集群部署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

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节点就可访问

待续

你可能感兴趣的:(记录)