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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/351114.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ElasticSearch的集群管理命令

ElasticSearch版本 {"name" : "data-slave1","cluster_name" : "data-es","cluster_uuid" : "xxxxxxxxxx-eMwxw","version" : {"number" : "7.2.1","build_flavor" : &…

【JaveWeb教程】(32)SpringBootWeb案例之《智能学习辅助系统》的详细实现步骤与代码示例(5)文件上传的实现

目录 SpringBootWeb案例052. 文件上传2.1 简介2.2 本地存储 SpringBootWeb案例05 前面我们已经实现了员工信息的条件分页查询以及删除操作。 关于员工管理的功能&#xff0c;还有两个需要实现新增和修改员工。 本节的主要内容&#xff1a; 文件上传 2. 文件上传 在我们完成…

【开源】基于JAVA语言的实验室耗材管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 耗材档案模块2.2 耗材入库模块2.3 耗材出库模块2.4 耗材申请模块2.5 耗材审核模块 三、系统展示四、核心代码4.1 查询耗材品类4.2 查询资产出库清单4.3 资产出库4.4 查询入库单4.5 资产入库 五、免责说明 一、摘要 1.1…

docker 存储管理

文章目录 docker 存储管理容器存储方案docker 容器存储解决方案 docker 存储驱动基本概述存储驱动的选择原则主流的 docker 存储驱动docker 版本支持的存储驱动 overlay2 存储驱动OverlayFSoverlay2 存储驱动要求配置 docker 使用 overlay2 驱动 overlay2 存储驱动的工作机制Ov…

C++核心编程:C++ 中的引用 笔记

2.引用 2.1 引用的基本使用 - 作用&#xff1a;给变量起别名 - 语法&#xff1a;数据类型 &别名 原名 #include<iostream> using namespace std; int main() {// 引用基本语法// 数据类型 &别名 原名int a 10;// 创建引用int &ref_a a;cout<<&qu…

搭建Redis集群

一 应用场景 为什么需要redis集群&#xff1f; 当主备复制场景&#xff0c;无法满足主机的单点故障时&#xff0c;需要引入集群配置。 一般数据库要处理的读请求远大于写请求 &#xff0c;针对这种情况&#xff0c;我们优化数据库可以采用读写分离的策略。我们可以部 署一台…

Ubuntu 系统如何修改时间

Ubuntu 系统如何修改时间 简介&#xff1a;在Ubuntu上&#xff0c;你可以使用以下三种方法来修改时间&#xff1a;date命令&#xff0c;timedatectl命令和hw 原文&#xff1a;Ubuntu 系统如何修改时间 (baidu.com)https://cloud.baidu.com/article/393621 三种方法修改Ubunt…

Linux——文本编辑器Vim

Linux中的所有内容以文件形式管理&#xff0c;在命令行下更改文件内容&#xff0c;常常会用到文本编辑器。我们首选的文本编辑器是Vim&#xff0c;它是一个基于文本界面的编辑工具&#xff0c;使用简单且功能强大&#xff0c;更重要的是&#xff0c;Vim是所有Linux发行版本的默…

husky结合commitlint审查commit信息

commintlint是一个npm包用来规范化我们的commit信息&#xff0c;当然这个行为的操作时期是在git的commit-msg生命周期期间&#xff0c;这一点当然是有husky来控制&#xff0c;需要注意的是commit-msg作为一个git生命周期会被git commit和git merge行为唤醒&#xff0c;并且可以…

03-Redis缓存高可用集群

文章目录 1、Redis集群方案比较2、Redis高可用集群搭建redis集群搭建Java操作redis集群 4、Redis集群原理分析槽位定位算法跳转重定位Redis集群节点间的通信机制gossip通信的10000端口网络抖动 Redis集群选举原理分析集群脑裂数据丢失问题集群是否完整才能对外提供服务Redis集群…

第二百八十八回

文章目录 1. 概念介绍2. 使用方法2.1 实现步骤2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取文件类型"相关的内容&#xff0c;本章回中将介绍如何播放视频.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 播放视频是我们常用…

用Visual Studio Code创建JavaScript运行环境【2024版】

用Visual Studio Code创建JavaScript运行环境 JavaScript 的历史 JavaScript 最初被称为 LiveScript&#xff0c;由 Netscape&#xff08;Netscape Communications Corporation&#xff0c;网景通信公司&#xff09;公司的布兰登艾奇&#xff08;Brendan Eich&#xff09;在 …

Java基础—面向对象OOP—17类与对象(创建、构造器、创建对象时简单内存分析)

把握重点&#xff0c;重点已标注&#xff0c;这篇笔记分了4个章节&#xff0c;重点看二、三、四 一、整体思维--重点把握面向对象的本质和特点 1、面向对象编程OOP&#xff1a; Object-Oriented programming 2、面向过程与面向对象 面向过程&#xff1a;线性思维 面向对象…

[嵌入式软件][启蒙篇][仿真平台] STM32F103实现IIC控制OLED屏幕

上一篇&#xff1a;[嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键 [嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集 [嵌入式软件][启蒙篇][仿真平台]STM32F103实现定时器 [嵌入式软件][启蒙篇][仿真平台] STM32F103实现IIC控制OLED屏幕 文章目…

有关链表的题目

目录 1.环形链表的约瑟夫问题 2.链表的中间节点 3.合并两个有序链表 4.反转链表 5.移除链表元素 1.环形链表的约瑟夫问题 环形链表的约瑟夫问题_牛客题霸_牛客网 (nowcoder.com) 思路&#xff1a;题目给出结构是环形链表&#xff0c;且题目已经定义好了环形链表的结构。 1…

MATLAB - 控制小车上的倒立摆

系列文章目录 前言 一、小车 - 摆杆 小车 - 摆杆模型如图 1 所示&#xff0c;使用 Simscape™ Multibody™ 在 Simulink 中建模。 图 1&#xff1a;小车上的倒立摆 图 2&#xff1a;Simscape 多体模型 该系统通过对小车施加可变力 进行控制。控制器需要在将小车移动到新位置或…

145基于matlab的求解悬臂梁前3阶固有频率和振型

基于matlab的求解悬臂梁前3阶固有频率和振型,采用的方法分别是&#xff08;假设模态法&#xff0c;解析法&#xff0c;瑞利里兹法&#xff09;。程序已调通&#xff0c;可直接运行。 145 matlab 悬臂梁 固有频率 振型 (xiaohongshu.com)

正则匹配 | 正则实际应用探索分享

这并不是一篇教正则基础的文章&#xff0c;其正则式不能对您进行使用后的结果负责&#xff0c;请以研究的眼光看待本篇文章。 技术就是懒人为了更好的懒才会想办法搞的东西&#xff0c;我最近因为某些原因需要频繁删除注释 我就想到通过替换的正则功能快速删除文件中的简单注…

微信小程序(十八)组件通信(父传子)

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.组件属性变量的定义 2.组件属性变量的默认状态 3.组件属性变量的传递方法 解释一下为什么是父传子&#xff0c;因为组件是页面的一部分&#xff0c;数据是从页面传递到组件的&#xff0c;所以是父传子&#xf…

DevExpress WinForms导航控件 - 交付更时尚、体验更好的业务应用(二)

DevExpress WinForms的Side Navigation&#xff08;侧边导航&#xff09;和Nav Panel&#xff08;导航面板&#xff09;可以帮助客户交付完全可模仿UI体验的业务解决方案&#xff0c;这些体验在当今流行的应用程序中都可找到。在上文中&#xff08;点击这里回顾>>&#x…