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 \

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命令