K8s 安装部署-Master和Minion(Node)文档
操作系统版本:CentOS 7.4
Master :172.20.26.167
Minion-1:172.20.26.198
Minion-2:172.20.26.210(后增加节点)
ETCD:172.20.27.218
先安装部署ETCD
yum install etcd -y
cd /etc/etcd/
cp etcd.conf etcd.conf.bak #备份etcd.conf 文件
grep -aivE "#|^$" etcd.conf #去掉#、空行的显示
[root@localhost etcd]# grep -aivE "#|^$" etcd.conf
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379"
ETCD_NAME="default"
ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"
vim etcd.conf
[root@localhost etcd]# mkdir -p /data/etcd/ #创建ETCD的数据目录
[root@localhost etcd]# id etcd #看看ETCD用户
uid=997(etcd) gid=995(etcd) 组=995(etcd)
[root@localhost etcd]# chown -R etcd.etcd /data/etcd/ #对数据目录授权etcd用户和组
[root@localhost etcd]# ls -ld /data/etcd/ #查看数据目录权限
drwxr-xr-x. 2 etcd etcd 6 4月 17 13:32 /data/etcd/
启动ETCD 服务
systemctl start etcd.service
ps -ef |grep -aiE etcd
创建key
etcdctl mk /atomic.io/network/config '{"Network":"172.17.0.0/16"}'
安装部署Master
yum install kubernetes-master flannel -y
[root@bogon kubernetes]# vim apiserver
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBE_ETCD_SERVERS="--etcd-servers=http://172.20.26.218:2379"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
因为我们没有配置账号和密码,所以要把“ServiceAccount,”删除掉,否则会出问题
[root@bogon kubernetes]# vim config
KUBE_ALLOW_PRIV="--allow-privileged=true"
KUBE_MASTER="--master=http://172.20.26.167:8080"
[root@bogon kubernetes]# systemctl start kube-apiserver
[root@bogon kubernetes]# systemctl start kube-controller-manager
[root@bogon kubernetes]# systemctl start kube-scheduler
[root@bogon]#ps -ef | grep kube
查看kube-apiserver、kube-controller-manager、kube-scheduler服务进程都起来了,到此Master 端部署完成。
也可以使用for I in 命令重新启动各个服务:
for I in etcd kube-apiserver kube-controller-manager kube-scheduler; do
systemctl restart $I
systemctl enable $I
systemctl status $I
done
安装部署(Node)Minion端
yum install kubernetes-node docker flannel *rhsm* -y
[root@bogon ~]# cd /etc/kubernetes/
[root@bogon kubernetes]# vim config
KUBE_ALLOW_PRIV="--allow-privileged=true" 在web管理界面中,让勾选“以特权身份运行”生效
KUBE_MASTER="--master=http://172.20.26.167:8080"
[root@bogon kubernetes]# vim kubelet
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_HOSTNAME="--hostname-override=172.20.26.198"
KUBELET_API_SERVER="--api-servers=http://172.20.26.167:8080"
vim /etc/sysconfig/flanneld #配置flannel网络
service flanneld start #先启动flanneld服务
service docker start #再启动docker 服务
在Master端也要配置flannel网络
[root@bogon ~]# vim /etc/sysconfig/flanneld
service flanneld start #启动flanneld服务
回到Minion端
启动kubelet、kube-proxy服务
[root@bogon ~]# service kubelet start
Redirecting to /bin/systemctl start kubelet.service
[root@bogon ~]# service kubelet restart
Redirecting to /bin/systemctl restart kubelet.service
[root@bogon ~]# service kube-proxy start
Redirecting to /bin/systemctl start kube-proxy.service
查看相关进程
[root@bogon ~]# ps -ef |grep kube
[root@bogon ~]# ps -ef |grep docker
[root@bogon ~]# ps -ef |grep flanneld
至此Minion端配置完成。
在Master端输入kubectl get nodes 验证是否成功?看到STATUS 的状态为Read 即可
[root@bogon ~]# kubectl get nodes
在Master端查看IP地址信息
在Minion端查看IP地址信息
在Master端查看FORWARD参数策略是否为ACEEPT(允许)?
[root@bogon ~]# iptables -t filter -L -n
Ping Minion端IP地址是通的
[root@bogon ~]# ping 172.17.60.1
[root@bogon ~]# ping 172.17.60.0
在Minion 端ping 172.17.34.0 看是否通
至此,Master和Minion端网络已打通。
在Minion端查看FORWARD 规则参数为DROP(丢弃)状态
需要将FORWARD 规则设置为ACCEPT(允许)状态
[root@bogon ~]# iptables -P FORWARD ACCEPT
[root@bogon ~]# iptables -t filter -L -n
K8S集群搭建完成。
创建K8S的web 管理界面
在Minion端导入两个镜像文件:pod-infrastructure、kubernetes-dashboard-amd64
这两个镜像文件直接从网络上下载可能会超时,导致导入失败,所以可以先从本地上传后进行导入。
Docker镜像导入指令如下:
docker load docker tag $(docker images|grep none|awk '{print $3}') registry.access.redhat.com/rhel7/pod-infrastructure docker load docker tag $(docker images|grep none|awk '{print $3}') bestwu/kubernetes-dashboard-amd64:v1.6.3 然后在Master端,上传两个yaml文件:dashboard-controller.yaml、dashboard-service.yaml 在Master 端创建k8s目录,将dashboard-controller.yaml、dashboard-service.yaml 移动到k8s目录下 然后修改一下dashboard-controller.yaml文件里的api地址 [root@bogon k8s]# vim dashboard-controller.yaml 保存退出 创建dashboard dashborad pods模块 kubectl create -f dashboard-controller.yaml kubectl create -f dashboard-service.yaml [root@bogon k8s]# kubectl get pods -n kube-system 看到STATUS状态为Running ,表示web界面配置成功。 通过浏览器访问Master端IP地址的8080端口 http://172.20.26.167:8080 在http://172.20.26.167:8080后面加上ui 即可访问k8s的web界面 http://172.20.26.167:8080/ui 制作centOS7镜像,先上传一个centos7-ansible镜像包,使用Dockerfile 文件制作镜像 vim Dockerfile mkdir -p /Docker 将Dockerfile 文件移动到/Docker目录下 mv Dockerfile /Docker/ cd /Docker docker build -t centos7-ssh:v1 . 在k8s管理界面,点击“创建”,新建一个名称为centos7容器,容器镜像:centos7-ssh:v1,显示高级选项,勾选“以特权身份运行”,点击“部署” Centos7容器创建完成,点击“容器组”里的“centos7-3728401273-pzr09”新建容器名, 也可以点击右上角的“运行命令“按钮,进入命令行界面 也可以通过Minion端通过ssh 连接进入这个容器 创建部署nginx容器 可以对nginx容器进行扩容多个 再增加Node(Minion)节点 yum install kubernetes-node docker flannel* *rhsm* -y [root@bogon ~]# cd /etc/kubernetes/ 编辑 [root@bogon kubernetes]# vim config KUBE_ALLOW_PRIV="--allow-privileged=true" 在web管理界面中,让勾选“以特权身份运行”生效 KUBE_MASTER="--master=http://172.20.26.167:8080" [root@bogon kubernetes]# vim kubelet KUBELET_ADDRESS="--address=0.0.0.0" KUBELET_HOSTNAME="--hostname-override=172.20.26.210" KUBELET_API_SERVER="--api-servers=http://172.20.26.167:8080" [root@bogon /]# vim /etc/sysconfig/flanneld 配置flannel网络 FLANNEL_ETCD_ENDPOINTS="http://172.20.218:2379" service flanneld start 先启动flanneld服务 flanneld服务无法启动,报错 将Minion端系统重启一下, 再执行service flanneld start 启动flanneld服务 service docker start #再启动docker 服务 启动kubelet、kube-proxy服务 [root@bogon ~]# service kubelet start Redirecting to /bin/systemctl start kubelet.service [root@bogon ~]# service kubelet restart Redirecting to /bin/systemctl restart kubelet.service [root@bogon ~]# service kube-proxy start Redirecting to /bin/systemctl start kube-proxy.service 也可以用for I in命令启动服务 for I in kube-proxy kubelet flanneld docker do systemctl restart $I systemctl enable $I done service iptables stop;iptables -P FORWARD ACCEPT 查看相关进程 [root@bogon ~]# ps -ef |grep kube [root@bogon ~]# ps -ef |grep docker [root@bogon ~]# ps -ef |grep flanneld 至此新增加的Node(Minion)节点配置完成。 在Master端输入kubectl get nodes 验证是否成功?看到STATUS 的状态为Read 即可 [root@bogon ~]# kubectl get nodes 回到k8s 管理界面,查看节点情况,172.20.26.210节点成功增加 创建K8S的web 管理界面 因没有创建本地仓库,所以需要在Minion端再导入pod-infrastructure、kubernetes-dashboard-amd64两个镜像文件。如果已创建好本地仓库,在第一次部署Minion节点时,将pod-infrastructure、kubernetes-dashboard-amd64镜像上传到本地仓库即可。 这两个镜像文件直接从网络上下载可能会超时,导致导入失败,所以可以先从本地上传后进行导入。 Docker镜像导入指令如下: docker load docker tag $(docker images|grep none|awk '{print $3}') registry.access.redhat.com/rhel7/pod-infrastructure docker load docker tag $(docker images|grep none|awk '{print $3}') bestwu/kubernetes-dashboard-amd64:v1.6.3 回到k8s管理界面,查看节点数量 新部署tomcat容器,数量为2,将会在两个节点中分别创建1台tomcat容器。 由于是在网上下载tomcat 镜像,需要等待时间较长,最后完成情况如下 在master控制端查看所有云主机的IP 地址 [root@bogon ~]# kubectl get -n default pods -o wide [root@bogon ~]# kubectl get -n default pods -o wide|awk '{print $1,$6}'|awk -F"-" 'NR>1 {print $1,$NF}'|awk '{print $1,$NF}' 可以通过宿主机重启容器 [root@bogon ~]# docker ps |grep tomcat 查看tomcat容器ID [root@bogon ~]# docker restart 574bf1497167 重启tomcat容器 重启,数据不会丢失 如果是删除云主机,会自动产生一台云主机,但是数据丢失 创建本地私有仓库 在172.20.26.198上创建本地私有仓库 docker pull docker.io/registry mkdir -p /data/registry/ docker run -itd -p 5000:5000 -v /data/registry:/var/lib/registry docker.io/registry [root@bogon ~]# vim /etc/docker/daemon.json "insecure-registries":["172.20.26.198:5000"] [root@bogon ~]# service docker restart [root@bogon ~]# ps -ef |grep 5000 查看5000端口状态 Docker images 查看一下镜像信息 对centos7-ssh镜像修改tag号 [root@bogon ~]# docker tag 5a97f88791d1 172.20.26.198:5000/centos7-ssh:v1 将修改好tag号的centos7-ssh镜像上传到本地仓库中 docker push 172.20.26.198:5000/centos7-ssh:v1 [root@bogon ~]# docker ps -a 查看docker 容器情况docker.io/registry [root@bogon ~]# docker start bf5bd542fba4 启动docker.io/registry [root@bogon ~]# ps -ef |grep 5000 查看5000端口情况 [root@bogon ~]# docker push 172.20.26.198:5000/centos7-ssh:v1 再次上传镜像到本地仓库 上传成功 上传一个nginx镜像到本地仓库 [root@bogon Docker]# vim Dockerfile_nginx 编写安装nginx的Dockerfile文件 [root@bogon Docker]# docker build -t centos7-nginx:v1 - < Dockerfile_nginx [root@bogon ~]# docker images [root@bogon ~]# docker tag 0672328a3122 172.20.26.198:5000/centos7-nginx:v1 修改tag号 [root@bogon ~]# docker push 172.20.26.198:5000/centos7-nginx:v1 上传nginx镜像到本地仓库 [root@bogon ~]# docker ps | grep 5000 查看本地私有仓库里的镜像 ls -l /data/registry/docker/registry/v2/repositories/ 添加2个nginx“外部”服务的容器,使用本地私有仓库 Failed to pull image "172.20.26.198:5000/nginx:latest": Get https://172.20.26.198:5000/v1/_ping: http: server gave HTTP response to HTTPS client Error syncing pod, skipping: failed to "StartContainer" for "nginx" with ErrImagePull: "Get https://172.20.26.198:5000/v1/_ping: http: server gave HTTP response to HTTPS client" 以上错误原因是在172.20.26.210节点上daemon.json文件里要指定本地私有仓库的地址, vim /etc/docker/daemon.json 执行以下命令,重启相关服务 for I in kube-proxy kubelet flanneld docker do systemctl restart $I systemctl enable $I done service iptables stop;iptables -P FORWARD ACCEPT 回到k8sweb界面,查看错误状态是否已消失 故障问题: 用Dockerfile 做了个镜像,改了tag号,push 到本地仓库,提示连接被拒绝 解决: docker run -itd -p 5000:5000 -v /data/registry:/var/lib/registry docker.io/registry docker ps docker push 172.20.26.198:5000/centos7-nginx:v2 创建部署外部nginx主机 故障问题: 故障问题 Master、Minion端排查解决: Master端: 1、ps -ef | grep kube 查看kube-apiserver、kube-controller-manager、kube-scheduler服务 2、 ps -ef |grep flanneld 查看flanneld的状态 3、ifconfig 查看网卡地址情况(是否有flannel0地址) Minion端: 1、ps -ef |grep kube 查看kubelet、kube-proxy服务 2、ps -ef |grep docker 查看Docker状态 3、 ps -ef |grep flanneld 查看flanneld的状态 4、iptables -t filter -L -n 查看是否是Chain FORWARD (policy ACCEPT)状态,如不是,执行iptables -P FORWARD ACCEPT命令