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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容