k8s 安装nfs_k8s安装与使用入门

本文介绍了kubernetes(k8s)的基本概念,包括Master、Node、Pod等,并详细阐述了k8s的安装过程,特别是通过kubeadmin离线安装和设置重启服务的步骤。接着,讲解了如何开启WebUI Dashboard、部署tomcat集群以及使用NFS实现集群文件共享。此外,还提到了利用Rinetd进行服务暴露和负载均衡支持的方法。
摘要由CSDN通过智能技术生成

1. 内容编排与kubernetes介绍

  • 支持集群环境内容编排的工具kubernetes 简称k8s.
  • k8s是谷歌官方提供的,底层基于docker,与docker-swarm是竞争关系。
  • 集群容器管理领域几乎都是采用的k8s。

k8s的职责

  • 自动化容器的部署和复制
  • 随时扩展或收缩容器规模
  • 容器分组Group,并且提供容器间的负载均衡
  • 实时监控,即时故障发现,自动替换

2.k8s基本概念

b49e828dddf1c03104685f17847c12dc.png
  • k8s Master 主节点
  • Node 节点
  • Service 服务
  • Replication Controller 复制控制器
  • Label 标签
  • Container 容器
  • Pod k8s最小控制单元

Master

Master是集群的网关和中枢枢纽,主要作用:暴露API接口,跟踪其他服务器的健康状态、以最优方式调度负载,以及编排其他组件之间的通信。单个的Master节点可以完成所有的功能,但是考虑单点故障的痛点,生产环境中通常要部署多个Master节点,组成Cluster.

Node

​ Node是k8s的工作节点,负责接收来自Master的工作指令,并根据指令相应地创建和销毁Pod对象,以及调整网络规则进行合理路由和流量转发。生产环境中,Node节点可以有N个。

Pod

  • pod是容器的容器,可以包含多个Container
  • 是k8s最小的可部署的单元,一个Pod就是一个进程
  • pod内部容器的网络互通,每个pod都有独立的虚拟ip
  • pod都是部署完整的应用或者模块
e55098f98f65a497f2fe99ac88eca559.png

kubelet kube-proxy docker

3. k8s安装

国内安装k8s途径

  • 使用kubeadmin离线安装
  • 使用阿里公有云平台k8s
  • 通过yum官方仓库
  • 二进制包形式安装,kubeasz

3.1 安装kubeadmin加载k8s镜像

# 以下命令在三台虚拟机执行 yz10  yz20  yz21mkdir /usr/local/k8s-installcd /usr/local/k8s-install

4. k8s离线部署

10.211.55.10  yz10   Master节点10.211.55.20  yz20   Node节点10.211.55.21  yz21   Node节点
# 1. 调整时区timedatectl set-timezone Asia/Shanghai# 2. 关闭selinux和防火墙sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/configsetenforce 0systemctl disable firewalldsystemctl stop firewalld# 3. k8sadmin镜像下载附带对应的docker# 4. 镜像上传到每个节点mkdir -p /usr/local/k8s-installscp -r kubernetes-1.14 root@yz10:/usr/local/k8s-install# 5. 安装docker,记得配置加速器tar -xf docker-ce-18.09.tar.gzcd docker yum localinstall -y *.rpm# 6. 确认cgroup为 cgroupfsdocker info|grep cgroup# 7. 安装kubeadmtar -xf kube114-rpm.tar.gzcd kube114-rpmyum localinstall -y *.rpm# 8. 关闭交换区swapoff -a  #关闭vi /etc/fstab# 注释这行 永久关闭#/dev/mapper/centos-swap swap                    swap    defaults        0 0# 9. 配置网桥cat < /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOFsysctl --system# 10. 通过镜像安装k8sdocker load -i k8s-114-images.tar.gzdocker load -i flannel-dashboard.tar.gz

5. 构建k8s集群

确保上述节点都已经安装好了k8s。

# master主服务器网络设置kubeadm init --kubernetes-version v1.14.1 --pod-network-cidr 10.244.0.0/16# 运行完毕后查看需要手动运行的命令mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config# 查看节点, 可以看到只有一个master节点kubectl get nodesNAME   STATUS     ROLES    AGE     VERSIONyz10   NotReady   master   5m21s   v1.14.1# 查看存在问题的podkubectl get pod --all-namespaces
5b078df20887f89cd3ea93cc49cc2a53.png
# pending 是需要安装flannel网络组件kubectl create -f /usr/local/k8s-install/kubernetes-1.14/kube-flannel.yml# 再次查看,已经处于running状态kubectl get pod --all-namespaces# 查看master的token kubeadm token list# 其余节点加入master节点集群kubeadm join 10.211.55.10:6443 --token 63zvtd.rej4gqrhselysqsb --discovery-token-unsafe-skip-ca-verification

master节点运行: kubectl get nodes

e953d721f9441e6ff1370cde34f576b5.png

可以看到,集群已经部署完毕。

6. k8s设置重启服务

  • kubeadm 是k8s集群快速构建工具
  • kubelet 运行在所有节点上,负责启动pod和容器,以系统服务的形式出现
  • kubectl 是k8s命令行工具,提供指令

systemctl start kubelet

设置开机启动 systemctl enable kubelet

7.开启WebUI Dashboard

# master开启仪表盘kubectl apply -f kubernetes-dashboard.yamlkubectl apply -f admin-role.yamlkubectl apply -f kubernetes-dashboard-admin.rbac.yamlkubectl -n kube-system get svc# 查看pod情况,dashbord running正常kubectl get pods --all-namespaces# 遇到问题可以删除pod,重新配置kubectl -n kube-system delete pod/{podName}

访问 http://宿主机ip:32000/ 即可进入dashbord

8.dashbord 部署tomcat集群

工作负载 -》 创建 即可

9.deployment脚本部署tomcat集群

  • 部署是指k8s向node节点发送指令创建容器的过程
  • k8s支持yml格式的部署脚本
  • kubectl create -f 部署文件.yml

编写第一个k8s部署脚本文件:

apiVersion: extensions/v1beta1kind: Deploymentmetadata:   name: tomcat-deployspec:   replicas: 2  template:     metadata:      labels:        app: tomcat-cluster    spec:       containers:       - name: tomcat-cluster        image: tomcat        ports:         - containerPort: 8080

与部署相关的常用命令:

  • kubectl create -f 部署文件.yml -》 创建部署
  • kubectl apply -f 部署文件.yml -》 更新部署配置
  • kubectl get pod [-o wide] -》 查看已部署pod
  • kubectl describe pod pod名称 -》 查看pod详细信息
  • kubectl logs [-f] pod名称 -》 查看pod输出日志
# 创建tomcat容器kubectl create -f tomcat-deploy.yml# 查看部署kubectl get deployment

10. 外部访问tomcat集群

service 服务用于对外暴露应用。

4d726a9e511aff7e8c25de7dcf0a6b87.png

编写服务 tomcat-service.yml

apiVersion: v1kind: Servicemetadata:   name: tomcat-service  labels:     app: tomcat-servicespec:  type: NodePort  selector:     app: tomcat-cluster  ports:   - port: 18010    targetPort: 8080    nodePort: 32500
# 创建负载均衡服务kubectl create -f tomcat-service.yml# 查看服务kubectl get service

11. 基于NFS实现集群文件共享

  • nfs主要是采用远程过程调用RPC机制实现文件传输
  • yum install -y nfs-utils rpcbind
9cc8abc9831e1b628295ab88090bed9e.png
systemctl start nfs.servicesystemctl start rpcbind.servicesystemctl enable nfs.servicesystemctl enable rpcbind.service# exportfs查看exportfs/usr/local/data/www-data        10.211.55.10/24  # 说明配置生效# 节点安装工具yum install -y nfs-utils# 节点安装完毕后showmount -e yz10# 挂载文件mkdir -p /mnt/www-datamount yz10:/usr/local/data/www-data /mnt/www-data
systemctl start nfs.servicesystemctl start rpcbind.servicesystemctl enable nfs.servicesystemctl enable rpcbind.service# exportfs查看exportfs/usr/local/data/www-data        10.211.55.10/24  # 说明配置生效# 节点安装工具yum install -y nfs-utils# 节点安装完毕后showmount -e yz10# 挂载文件mkdir -p /mnt/www-datamount yz10:/usr/local/data/www-data /mnt/www-data

12. 部署配置挂载点

# 查看deploymentkubectl get deployment# 删除部署,服务servicekubectl delete deployment tomcat-deploykubectl delete service tomcat-service# 重新部署挂载vi tomcat-deploy.yml # 修改部署文件
apiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: tomcat-deployspec:  replicas: 2  template:    metadata:      labels:        app: tomcat-cluster    spec:      volumes:       - name: webapp        hostPath:           path: /mnt/www-data      containers:      - name: tomcat-cluster        image: tomcat        ports:        - containerPort: 8080        volumeMounts:         - name: webapp          mountPath: /usr/local/tomcat/webapps
# 进入pod查看挂载是否成功kubectl exec -it tomcat-deploy-6dcc5c59c-hg5z7 bash

13. 利用 Rinetd 对外提供Service以及负载均衡支持

vi tomcat-service.yml 修改服务文件

apiVersion: v1kind: Servicemetadata:  name: tomcat-service  labels:    app: tomcat-servicespec:#  type: NodePort  selector:    app: tomcat-cluster  ports:  - port: 18010    targetPort: 8080#    nodePort: 32500
# 创建服务kubectl create -f tomcat-service.yml# 在www-data 创建一个test目录创建文件vi index.jsp# 访问curl http://10.97.80.216:18010/test/index.jsp
04e5262da900283640756eb92b194d98.png
a4af11e107fa8e118a7d08651261cef3.png

可以观察到随机负载均衡的效果。

端口转发工具 Rinetd

  • Rinetd 是Linux操作系统中为重定向传输控制协议工具
  • 可以将源ip端口数据转发到目标ip端口
  • 在k8s中用于将service服务对外暴露
# 宿主机安装Rintedcd /usr/localhttp://www.rinetd.com/download/rinetd.tar.gzcd rinetdsed -i 's/65536/65535/g' rinetd.cmkdir -p /usr/man/yum install -y gccmake && make install# 编写端口映射配置vi /etc/rinetd.conf0.0.0.0 18010 10.97.80.216 18010# 加载配置rinetd -c /etc/rinetd.conf# 测试外部访问,已经可以通了http://yz10:18010/test/

14. 更新集群配置与资源限定

k8s部署调整命令

  • 更新集群配置: kubectl apply -f yml文件
  • 删除部署|服务|pod
  • kubectl delete deployment | service | pod 名称

资源限定

containers: - name: tomcat-cluster  image: tomcat  resources:     requests:  # 需要的资源      cpu: 1      memory: 500Mi    limits:    # 限制的资源      cpu: 2   # cpu不一定是整数      memory: 1024Mi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值