集群环境容器部署的困境

动态调整 一次性部署2w台服务器 成本高,困难。所以需要容器编排工具
1.docker compose 只能用于单机容器编排。创业型的小公司使用
2.docker swarm 集群编排
3.kubernetes (k8s) 谷歌提供的容器编排工具,定位和docker swarm 是一致的
有docker官网无法替代的优势,非常成熟,在竞争的过程中k8s胜,docker swarm败

kubernetes 的职责

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

k8s的基本概念

image.png

master

node 可以是一台独立的物理机,也可以是虚拟机,pod是k8s中最重要,也是最基础的概念
  • pod 是“容器”的容器,可以包含多个Container
  • pod是k8s的自小可部署单元,一个pod就是一个进程
  • pod内部容器网络互通,每个pod都有独立虚拟ip
  • pod都是部署完整的应用或模块

pod间无法直接交流,需要通过service进行联通 image.png pause 每个pod都含有的容器 1.共享命名空间,内的容器可以互联互通 2.提供共享的挂在数据卷,volume image.png 运用方式:
1. 一个pod是一个完整的应用,多个pod组成应用 2.pod只部署一个tomcat,组合应用

Lable 说明性的标签

在后期应用很重要,相当于pod的别名,根据此找到pod进行操作

Replication Controller 复制控制器

1.按照额外的规则创建副本
2.对pod进行监控,pod死掉,可重新创建
3.根据参数,自动创建pod

国内安装k8s的四种途径

国内连接google困难,所以从官网安装很费劲

  • 使用Kurbenets通过离线镜像安装
  • 使用阿里共有云平台k8s,钞能力
  • 通过yum官方仓库安装,上古版本
  • 二进制包的形式进行安装,kubeazs(github) (不知道进行了什么修改,不安全)

Kubernetes 安装-准备集群 (v1.14 当前业界最稳定常用版本)

环境准备
  • Centos 7 Master * 1

-Mater 192.168.163.132

  • Centos 9 Node *2

-Node 192.168.163.133
-Node 192.168.163.137

1.设置主机名称与时区

timedatectl set-timzone Asia/Shanghai # 132执行
timedatectl set-timzone Asia/Shanghai # 132执行

安装kubeadm快速部署工具

帮助k8s安装

kubectl get nodes 查看所有的nodes,master也会显示出来

NAME STATUS ROLES AGE VERSION
master NotReady master 13m v1.14.1

kubectl get pod —all=namespace
如果长时间出现 CrashLoopBackOff说明硬件资源不够了,增加CPU与内存资源即可
设置全局变量
安装flannel网络组建
Kubectl create -f kube-flannel.yml
如果忘记
在master上执行Kubadm token list 查看在node上运行

kubeadm/kublet/kubectl 的区别

  • kubadm:是k8s集群开始构建工具
  • kublet:是运行在所有节点上,负责启动POD和容器,以系统服务形式出现
  • kubectl:是kubernetes命令行工具,提供指令

    启动节点命令 systemctl start kubelet 设置开机启动 systemctl enable

Master 开启仪表盘

kubectl apply -f kubernetes-dashboard.yaml
kubectl appy -f admin-role.yaml
kubectl apply -f kubernetes-dashboard-admin.rbac.yaml
kubectl -n kube-system get svc
http://ip:32000 访问

Develop部署 [更常用]

  • 部署是指Kubernetes想node节点发送指令,创建容器的构成
  • Kubernetes支持yml格式部署
  • kubectl create -f 部署yml

    1. aipVersion: extensions/v1beta1
    2. kind: Deployment
    3. metadata:
    4. name: tomcat-deploy
    5. spec:
    6. replicas: 2
    7. template:
    8. metadata:
    9. lables:
    10. app: tomcat-cluster # pod的名称,后面设置service服务时候会用到
    11. spec:
    12. containers: #容器的设置
    13. - name: tomcat-cluster # - 代表是集合,通常好上述app的名称一致
    14. image: tomcat:latest
    15. ports:
    16. - containerPort: 8080 # 容器内部对外暴露的端口

    部署的命令

  • kubectl create -f 部署yml文件 #创建部署

  • kubectl apply -f 部署yml文件 #更新部署配置
  • kubectl get pod [-o wide] #查看已部署的pod
  • kubectl describe pod pod_name #查看pod详情
  • kubectl logs [-f] pod_nam #查看pod输出日志