Dashboard可视化部署
1.子节点配置docker中央仓库(非必须)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["你的阿里docker仓库地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2.按图所示配置,意思是从docker仓库中拉取镜像并且部署一套2个tomcat的集群
3.点击部署
部署成功
如下图找到对外暴露的端口,浏览器输入node的IP加上端口号就能访问了。目前这个端口号是随机生成的。
K8S的可靠性演示
执行命令
docker ps
可以看到K8S在docker目录下生成了一个tomcat服务,运行强制删除命令,模拟容器无故挂掉
docker rm -f c4e62f7f80e9
我们稍等一会,对比容器ID和时间,就能看到K8S为我们重新创建并启动了服务。
Deployment脚本部署
- K8S支持yml格式的部署脚本
- kubectl create -f 部署yml文件,部署后在dashboard中我们也是可以直接修改这个部署文件的
部署脚本范本
apiVersion: apps/v1 #api的版本号
kind: Deployment #文件类型,表示用于部署的配置文件
metadata:
name: tomcat-deploy #部署文件名字
spec:
replicas: 2 #产生的pod数量
template:
metadata:
labels:
app: tomcat-cluster #产生pod的label标签名
spec:
volumes:
- name: web-app
hostPath:
path: /mnt
containers:
- name: tomcat-cluster #创建的容器命名
image: tomcat:latest #容器来源名字
resources:
requests: #资源分配
cpu: 0.5
memory: 200Mi
limits:
cpu: 1
memory: 512Mi
ports:
- containerPort: 8080 #容器内对外暴露的端口号
#volumeMounts: #将容器/usr/local/tomcat/webapps目录挂载到web-app指定的/mnt目录
#- name: web-app
#mountPath: /usr/local/tomcat/webapps
部署相关的常用命令
- kubectl create -f 部署yml文件 #创建部署
- kubectl apply -f 部署yml文件 #更新部署配置
- kubectl get pod [-o wide] #查看已部署pod,括号中的参数表示显示详细信息
- kubectl describe pod pod名称 #查看Pod详细信息
- kubectl logs [-f] pod名称 #查看pod输出日志
我们在主节点使用命令执行部署
mkdir -p /k8s/tomcat-deploy #创建用于部署的文件夹
cd /k8s/tomcat-deploy/
vim tomcat-deploy.yml #把上面的yml复制进来保存
kubectl create -f tomcat-depoly.yml
kubectl get deployment #查看我们的已部署列表
上面介绍了查看详细信息的命令,大家自行尝试。dashboard主要是图形化显示这些命令中的数据信息
部署网络配置
刚刚通过脚本部署的tomcat服务是无法通过外面访问的,因为只配置了容器端口的映射,没有配置外网的端口映射。
如图我们需要在master配置一个service,我们将其命名为tomcat-service做端口映射,当请求过来时,先到tomcat-service,然后根据策略分发给左边的tomcat或者右边的tomcat,是不是和Nginx的负载均衡非常像?这里可以粗浅的认为service是K8S内置的负载均衡器。
配置service的脚本
apiVersion: v1
kind: Service #脚本类型
metadata:
name: tomcat-service
labels:
app: tomcat-service
spec:
type: NodePort
selector:
app: tomcat-cluster #之前部署的tomcat 的 label
ports:
- port: 8000 #开辟一个节点端口与tomcat配置的端口进行映射
targetPort: 8080 # tomcat暴露的端口
nodePort: 32500 #宿主机暴露的端口
mkdir -p /k8s/tomcat-service/
cd /k8s/tomcat-service/
vim tomcat-service.yml
kubectl create -f tomcat-service.yml
此时只需要宿主机的IP加上暴露的端口就可以进行访问了,但是这种方式存在一个弊端就是必须知道服务的IP以及暴露的端口号才能访问,生产环境一般不推荐这种方式
K8S实现集群文件共享
-
文件共享服务器(master)安装nfs-utils和rpcbind,NFS是sun公司开源的一款网络文件系统
yum -y install nfs-utils rpcbind
-
设置用户设置共享目录的访问权限:
mkdir -p /nfs/resource chmod a+w /nfs/resource
-
在nfs服务器中为客户端配置共享目录:
echo "/nfs/resource *(rw,async,no_root_squash)" >> /etc/exports
-
查看配置是否生效
exportfs
-
节点服务器安装nfs-utils
yum -y install nfs-utils
-
启动rpcbind和nfs-server
systemctl start rpcbind systemctl start nfs-server
-
设置rpcbind和nfs-server开机启动
systemctl enable rpcbind systemctl enable nfs-server
-
查看主服务器共享文件夹,以及服务是否启动
showmount -e 192.168.220.131
-
在节点执行以下命令将服务器共享目录挂载到节点服务器/mnt目录
mount -t nfs 192.168.220.131:/nfs/resource /mnt
在master节点的新建两个文件,在其他node节点可以看到
K8S利用Rinetd实现负载均衡
前面使用的了NodePort做为外部访问方式,现在换一种方式
-
修改tomcat-service.yml,注释type以及nodePort
cd /k8s/tomcat-service vim tomcat-service.yml
apiVersion: v1 kind: Service metadata: name: tomcat-service labels: app: tomcat-service spec: # type: NodePort selector: app: tomcat-cluster ports: - port: 8000 targetPort: 8080 # nodePort: 32500
-
修改tomcat-deploy.yml中tomcat的webapp挂载目录
cd /k8s/tomcat-deploy vim tomcat-deploy.yml
apiVersion: apps/v1 #api的版本号 kind: Deployment #文件类型,表示用于部署的配置文件 metadata: name: tomcat-deploy #部署文件名字 spec: replicas: 2 #产生的pod数量 template: metadata: labels: app: tomcat-cluster #产生pod的label标签名 spec: volumes: - name: web-app hostPath: path: /mnt containers: - name: tomcat-cluster #创建的容器命名 image: tomcat:latest #容器来源名字 resources: requests: #资源分配 cpu: 0.5 memory: 200Mi limits: cpu: 1 memory: 512Mi ports: - containerPort: 8080 #容器内对外暴露的端口号 volumeMounts: #将容器/usr/local/tomcat/webapps目录挂载到web-app指定的/mnt目录 - name: web-app mountPath: /usr/local/tomcat/webapps
-
再次部署tomcat
cd /k8s/tomcat-service kubectl delete service tomcat-service cd /k8s/tomcat-deploy kubectl delete deployment tomcat-deploy #再次部署 cd /k8s/tomcat-deploy kubectl create -f tomcat-deploy.yml cd /k8s/tomcat-service kubectl create -f tomcat-service.yml
-
将百度云盘里面test目录下的index.jsp,复制到/nfs/resource/test,用于tomcat挂载,jsp的作用是返回当前服务器的IP
mkdir /nfs/resource/test cd /nfs/resource/test
- 查看配置后service的IP地址
kubectl describe service tomcat-service
- 通过service暴露的IP,在master节点上访问tomcat的index.jsp页面,可以看到经过负载均衡后,IP的返回结果
-
上述操作完成后外网并不能访问内部tomcat服务器,因为service暴露的是一个内部IP,此时可以使用一个端口映射工具rinetd解决该问题。
链接:https://pan.baidu.com/s/1qgruL68yrW6zzp0AEnG1tQ
提取码:j6dt
-
下载文件传输到服务器中执行以下命令
tar -zxvf rinetd.tar.gz cd rinetd sed -i 's/65536/65535/g' rinetd.c #调整允许映射的端口范围 mkdir -p /usr/man/man8 yum install -y gcc #安装C语言源码编译器 make && make install vim /etc/rinetd.conf #在/etc/rinetd.conf加入 0.0.0.0 8000 192.168.220.131 8000 rinetd -c /etc/rinetd.conf #加载配置
访问浏览器,现在外网可以通过内置的service负载均衡访问tomcat