Dashboard与Deployment脚本部署K8S集群

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实现集群文件共享

  1. 文件共享服务器(master)安装nfs-utils和rpcbind,NFS是sun公司开源的一款网络文件系统

    yum -y install nfs-utils rpcbind
    
  2. 设置用户设置共享目录的访问权限:

    mkdir -p /nfs/resource 
    chmod a+w /nfs/resource
    
  3. 在nfs服务器中为客户端配置共享目录:

    echo "/nfs/resource *(rw,async,no_root_squash)" >> /etc/exports
    
  4. 查看配置是否生效

    exportfs 
    
  5. 节点服务器安装nfs-utils

    yum -y install nfs-utils
    
  6. 启动rpcbind和nfs-server

    systemctl start rpcbind
    systemctl start nfs-server
    
  7. 设置rpcbind和nfs-server开机启动

    systemctl enable rpcbind
    systemctl enable nfs-server
    
  8. 查看主服务器共享文件夹,以及服务是否启动

    showmount -e 192.168.220.131
    
  9. 在节点执行以下命令将服务器共享目录挂载到节点服务器/mnt目录

    mount -t nfs 192.168.220.131:/nfs/resource /mnt
    

    在master节点的新建两个文件,在其他node节点可以看到

    master

    node1

K8S利用Rinetd实现负载均衡

前面使用的了NodePort做为外部访问方式,现在换一种方式

  1. 修改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
    
  2. 修改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
    
  3. 再次部署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   
    
  4. 将百度云盘里面test目录下的index.jsp,复制到/nfs/resource/test,用于tomcat挂载,jsp的作用是返回当前服务器的IP

    mkdir  /nfs/resource/test
    cd /nfs/resource/test
    
  1. 查看配置后service的IP地址
kubectl describe service tomcat-service
  1. 通过service暴露的IP,在master节点上访问tomcat的index.jsp页面,可以看到经过负载均衡后,IP的返回结果
  1. 上述操作完成后外网并不能访问内部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

你可能感兴趣的:(Dashboard与Deployment脚本部署K8S集群)