一、前言
1.注意
cat >> /etc/security/limits.conf << EOF
......
EOF
是一个整体,复制的时候要格外的注意。
以 cat >>/etc/profile<<EOF 为始,以EOF结尾。
2.任务分配
- 安装docker是master与node节点必做的。
- master”第三章第5节“不做。
- node节点安装完docker后只做”第三章第5节“。
3.主机配置
只做推荐
系统镜像:centos7.6(mini-无桌面版)
硬件配置:2核2G
二、安装docker
1.关闭防火墙
云服务器不做。
去安全组添加相应的端口就行,本次实验添加了“8080,8081”。
[root@master ~]# systemctl stop firewalld && systemctl disable firewalld
2.关闭SELinux
云服务器看一眼有没有改,有的是改了的。
[root@master ~]# vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled #修改这里
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
3.开启路由转发
[root@master ~]# cat >> /etc/sysctl.conf << EOF
net.ipv4.ip_forward=1
EOF
[root@master ~]# sysctl -p
4.安装并启动docker
[root@master ~]# yum install -y docker && systemctl start docker && systemctl enable docker
5.添加下载源
[root@master ~]# cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors":
["https://mfly25p6.mirror.aliyuncs.com"]
}
EOF
[root@master ~]# systemctl restart docker
三、搭建Rancher
1.下载Rancher
[root@master ~]# docker pull rancher/server
2.启动Rancher
[root@master ~]# docker run -itd -p 8080:8080 --restart=always docker.io/rancher/server:latest
3.访问Rancher
IP地址:8080
云服务器是:公网IP:8080
4.使用Rancher
按图示进行:
5.node节点加入主机
将复制的那段代码粘贴到其他“node”节点,这里不能复制我的,要复制上图中的那个,下面只做参考。
node01节点
[root@node01 ~]# sudo docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.11 http://123.249.74.101:8080/v1/scripts/41D9EDC8A1C409107589:1672444800000:CzfVPfg6UYYkP6Q7yOy7jcSz8sY
node02节点
[root@node02 ~]# sudo docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.11 http://123.249.74.101:8080/v1/scripts/41D9EDC8A1C409107589:1672444800000:CzfVPfg6UYYkP6Q7yOy7jcSz8sY
重新点击“主机”即可看到添加进来的主机
四、管理应用K8S
1.添加
注:如果长时间都不能部署成功,一直都有“黄色三角警告”的话那就去检查是哪台主机出现问题,然后把那台主机禁用掉即可部署成功(大概率)。
为了避免打乱节奏,如果想要解决这个问题的话请看 第五章第1节 的教程。
2.使用
这里用部署tomcat来做实验。
按图所示来做:
输入yaml内容或准备yaml文件
创建tomcatPod的yaml
apiVersion: apps/v1 #指定api版本标签
kind: Deployment #定义资源的类型/角色,deployment为控制器
metadata: #定义资源的元数据信息
name: tomcat1 #定义资源的名称,在同一个namespace空间中必须是唯一的
labels: #定义资源标签
app: tomcat1
spec:
replicas: 1 #定义副本数量
selector: #定义选择器
matchLabels: #匹配上面的标签
app: tomcat1 #匹配模板名称
template: #定义模板
metadata:
labels:
app: tomcat1
spec:
containers: #定义容器信息
- name: tomcat1 #容器名,与标签名要相同
image: registry.cn-hangzhou.aliyuncs.com/houxiongxiong/tomcat:8.2 #容器使用的镜像以及版本
ports:
- containerPort: 8080 #定义容器的对外端口
先复制上面的内容到下图所示的框框里面
检查一下是否报错,没有报错的话就进行下一步。
创建tomcat的网络服务
apiVersion: v1
kind: Service
metadata:
name: tomcat1
labels:
app: tomcat1
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
selector:
app: tomcat1
3.验证结果
按图示进行:
访问成功
五、实验总结
1.查找问题主机
1.1解决方法
停用之后删除主机再重新添加(删除只能在停用之后才能使用,添加的方法在“第三章第5节”。)
重新添加也有问题的话那就只能重装那台主机的系统或者重新建一台主机(暂时的办法)
2.个人唠叨
刚开始我是在华为云买了三台云服务器来做实验,刚做实验时一路畅通无阻,直到部署K8S时出现了问题。
第一次,有一台主机的一个节点一直”报黄“,因为是刚接触,我就认为是还没有创建好,所以又等了十几分钟。但是十几分钟后依旧没有部署成功,然后我去看了那个一直“报黄”节点的运行日志,发现那个节点在运行的过程中会重复报一个错“Container should have been running but is in removed state. Check logs for more information.”。大致意思是“容器应该一直在运行,但处于已删除状态。查看日志以获取更多信息。”。看到这个结果,我果断在“基础设施应用”里面把K8S给删除了,再次安装。
第二次,这次又是第一次的那台主机出了问题,第一次”报黄“的那个节点依旧”报黄“,而且这次又多加了一个节点”报黄“,跑到后面两个节点都没跑成功,查看运行日志依旧重复报第一次报的错误。
第三次部署时我就把有问题的那台主机给停用了,这次部署就成功了。
后面由于掉了一台主机,所以我后面在本地创了四台虚拟机来继续后面的实验,仔细看的话你会发现我后面浏览器地址栏里面的访问地址与前面不一样。
关于在K8SWEB端用yaml来创建应用部署时报”命名空间“错误的问题。
个人建议在不完全了解K8S使用yaml来部署应用时,应当把所有”name、app“后面的名称都统一为一个名字。
如我下面为tomcat9所写的,我将所有”name、app“后面的名称都统一为”tomcat2“。
1.创建pod
apiVersion: apps/v1 #指定api版本标签 kind: Deployment #定义资源的类型/角色,deployment为控制器 metadata: #定义资源的元数据信息 name: tomcat2 #定义资源的名称,在同一个namespace空间中必须是唯一的 labels: #定义资源标签 app: tomcat2 spec: replicas: 1 #定义副本数量 selector: #定义选择器 matchLabels: #匹配上面的标签 app: tomcat2 #匹配模板名称 template: #定义模板 metadata: labels: app: tomcat2 spec: containers: #定义容器信息 - name: tomcat2 #容器名,与标签名要相同 image: registry.cn-hangzhou.aliyuncs.com/houxiongxiong/tomcat:9.1 #容器使用的镜像以及版本 ports: - containerPort: 8080 #定义容器的对外端口
2.创建网络服务
apiVersion: v1 kind: Service metadata: name: tomcat2 labels: app: tomcat2 spec: type: NodePort ports: - port: 8080 targetPort: 8080 selector: app: tomcat2
评论区