集群环境容器部署的困境
动态调整 一次性部署2w台服务器 成本高,困难。所以需要容器编排工具
1.docker compose 只能用于单机容器编排。创业型的小公司使用
2.docker swarm 集群编排
3.kubernetes (k8s) 谷歌提供的容器编排工具,定位和docker swarm 是一致的
有docker官网无法替代的优势,非常成熟,在竞争的过程中k8s胜,docker swarm败
kubernetes 的职责
1.自动化容器的部署和复制
2.随时扩展或收缩容器的规模
3.容器分组Group,并且提供了容器间的负载均衡
4.实时监控,即故障发现,自动替换
k8s的基本概念
master
node 可以是一台独立的物理机,也可以是虚拟机,pod是k8s中最重要,也是最基础的概念
- pod 是“容器”的容器,可以包含多个Container
- pod是k8s的自小可部署单元,一个pod就是一个进程
- pod内部容器网络互通,每个pod都有独立虚拟ip
- pod都是部署完整的应用或模块
pod间无法直接交流,需要通过service进行联通
pause 每个pod都含有的容器 1.共享命名空间,内的容器可以互联互通 2.提供共享的挂在数据卷,volume
运用方式:
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
aipVersion: extensions/v1beta1kind: Deploymentmetadata:name: tomcat-deployspec:replicas: 2template:metadata:lables:app: tomcat-cluster # pod的名称,后面设置service服务时候会用到spec:containers: #容器的设置- name: tomcat-cluster # - 代表是集合,通常好上述app的名称一致image: tomcat:latestports:- 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输出日志
pause 每个pod都含有的容器
1.共享命名空间,内的容器可以互联互通
2.提供共享的挂在数据卷,volume
运用方式: