K8s 安装部署-Master和Minion(Node)

news/2024/7/3 14:15:39 标签: kubernetes, 容器, 云原生

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 <pod-infrastructure.tgz,将导入的pod镜像名称修改,命令如下:

docker tag $(docker images|grep none|awk '{print $3}') registry.access.redhat.com/rhel7/pod-infrastructure

docker load <kubernetes-dashboard-amd64.tgz,将导入的pod镜像名称修改,命令如下:

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 <pod-infrastructure.tgz,将导入的pod镜像名称修改,命令如下:

docker tag $(docker images|grep none|awk '{print $3}') registry.access.redhat.com/rhel7/pod-infrastructure

docker load <kubernetes-dashboard-amd64.tgz,将导入的pod镜像名称修改,命令如下:

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


http://www.niftyadmin.cn/n/5351829.html

相关文章

南京观海微电子---如何减少时序报告中的逻辑延迟

1. 引言 在FPGA逻辑电路设计中&#xff0c;FPGA设计能达到的最高性能往往由以下因素决定&#xff1a; ▪ 工作时钟偏移和时钟不确定性&#xff1b; ▪ 逻辑延迟&#xff1a;在一个时钟周期内信号经过的逻辑量&#xff1b; ▪ 网络或路径延迟&#xff1a;Vivado布局布线后引…

C++20 高级编程

文章目录 前言前奏lambda浅谈std::ref的实现浅谈is_same浅谈std::function的实现std::visit 与 std::variant 与运行时多态SFINAE类型内省标签分发 (tag dispatching)软件设计六大原则 SOLID To be continue.... 前言 C20 是C在C11 之后最大的一次语言变革, 其中引入了大量具有…

【架构】Docker实现集群主从缩容【案例4/4】

实现集群主从缩容【4/4】 接上一节&#xff0c;在当前机器为4主4从的架构上&#xff0c;减缩容量为3主3从架构。即实现删除6387和6388. 示意图如下&#xff1a; 第一步&#xff1a;查看集群情况&#xff08;第一次&#xff09; redis-cli --cluster check 127.0.0.1:6387roo…

GUN/Linux时间同步服务之chrony配置管理

风险告知 本人及本篇博文不为任何人及任何行为的任何风险承担责任&#xff0c;图解仅供参考&#xff0c;请悉知&#xff01;相关配置操作是在一个全新的演示环境下进行的&#xff0c;演示环境中没有任何有价值的数据&#xff0c;但这并不代表摆在你面前的环境也是如此。生产环境…

PostgreSql和Oracle的事务机制区别以及对程序的影响

前言 几年前IT信息产业的一些核心技术包括架构、产品以及生态都是国外制定&#xff0c;然而自从“遥遥领先”公司被制裁后&#xff0c;国家开始大力支持信息产业“新基建”&#xff0c;自2020年开始市场上涌现出了大量的国产化软件&#xff0c;就国产化数据库而言我所在的公司…

Execution failed for task ‘:app:compileFlutterBuildDebug‘. 解决

前言 项目场景&#xff1a;在Flutter项目中 或 在嵌入Flutter模块的Android原生项目&#xff1b; 启动场景&#xff1a;在Android原生端 编译 或 运行 项目时&#xff0c;可能出现这个异常&#xff1b; 异常 Build窗口并没有追踪到&#xff0c;引发异常代码位置&#xff0c;…

总结NB-IoT模块和单片机的区别

在学习了NB-IoT模块后&#xff0c;紧接着又学习了单片机系统&#xff0c;单片机和NB-IoT模块有什么不同之处呢&#xff0c;总结为以下几点。 大纲如图&#xff1a; 一、硬件层面 1、采用芯片不同&#xff0c; &#xff08;1&#xff09;封装&#xff1a;封装尺寸、方式不同&a…

【极数系列】Flink环境搭建Docker版本(04)

文章目录 引言01 Linux安装Docker1.安装yum-utils软件包2.安装docker3.启动docker4.设置docker自启动5.配置Docker使用systemd作为默认Cgroup驱动6.重启docker 02 docker部署Flink1.18版本1.拉取最新镜像2.检查镜像3.编写dockerFile文件4.执行dockerFile5.检查flink是否启动成功…