本文对KuberNetes 中的概念做简单介绍。同时记录了一次KuberNetes和KuberSphere的部署经历。
初识Kubernetes
生产级别的容器编排系统
自动化的容器部署、扩展和管理
简单的说Kubernetes就是用来管理Docker的。它解决了Docker之上,应用之下,这个层面上许多复杂的问题。如自动部署,限制资源,自动重启、迁移故障,简化应用的访问等。
准备知识
master
管理节点,与node
工作节点相对。node干活master管理。
其中master包含组件:
api server
操作入口。Kubernetes的所有操作指令由对此下达。
etcd
集群内部用键值数据库。
scheduler
调度器。调度工作的。
controller
控制器。发布实际的指令。
node 中包含组件:
pod
几个相关容器(docker),它们被统一管理。Kubernetes的基本管理单位。
kubelet
代理。master节点命令的实际执行者。
kube-proxy
网络代理,网络入口和出口。
kubectl
命令行管理工具。
volume
数据卷,保存数据。
概念:
deployment
部署。指在节点部署的pod。
service
服务,组合多个部署的pod,提供对外访问。
label
标签,selector
选择器,如给节点打上某标签,可以在部署应用时,只部署在包含标签的节点上。
namespace
命名空间,做逻辑隔离。
kubeadm
集群部署工具。
Ingress
应用网关,统一出口、负载均衡。
架构图
KubeSphere
面向云原生应用的容器混合云
Kubernetes的图形化的、优秀的管理界面,代替命令行的操作方式。
可以管理多云上的集群。将是日常工作中打交道最多的工具。
Kubernetes集群搭建
程序版本:
- kubernetes v1.17.3
- Docker version 18.03.1-ce, build 9ee9f40
- KubeSphere 3.0.0
配置文件:
安装过程中用到的配置文件。
https://gitee.com/blue1018/blue/tree/master/kubernetes_start/k8s
安装前置条件
- 一台或多台机器,操作系统Centos7。
- 硬件配置:3072MB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多。
- 各节点网络通畅。
所有节点下的操作
操作系统设置
设置阿里云Centos镜像源
安装Docker
安装 kubectl、kubeadm、kubelet
主节点下的操作
镜像拉取
初始化主节点
其中apiserver-advertise-address 要换成自己的IP。
安装正常时的返回结果:
执行返回结果中的命令
pod进度监控
新开个ssh窗口监视pod安装进度
安装网络插件
子节点加入集群
主节点中建立TOKEN
子节点执行,执行返回结果中的命令,加入集群
在主节点查看集群的node
部署Ingess
部署一个nginx
以nginx为例测试Ingress
用Ingress暴露一个服务
通过Ingress访问 Nginx服务
浏览器里通过 nginx.dev.com
访问。
这里Ingress 用域名 nginx.dev.com
暴露的Nginx服务。需要修改本地host文件,把域名映射到部署了ingress的节点的可访问IP。
KuberSphere 安装
在主节点最小化安装。
安装openebs
Kubernetes的存储方案
删除污点,node201
换成你自己的master hostname。
建立命名空间、安装
等待安装结束
设置默认storageclass
安装完成后还原污点
安装kubesphere
查看安装日志
等待几分钟的时间、日志出现下面内容就可以访问了。
结语
完成集群搭建后,可阅读 Kubernetes、KuberSphere 官方文档。做进一步探索,如高可用的Kubernetes集群、KuberSphere完整的DEVOPS流。
附录
常用命令例子
kubectl get all --all-namespaces -o wide #查看集群所有资源 kubectl get pods --all-namespaces #查看所有空间下的pod kubectl create deployment nginx --image=nginx #以nginx镜像建立一个名为nginx的部署。 kubectl get deployment #查看部署 kubectl scale --replicas=4 deployment nginx #修改名为nginx的部署,副本数量为4 kubectl get pod nginx -o yaml #输出名为nginx的pod的yaml配置信息。 kubectl create deployment nginx --image=nginx --dry-run -o yaml #dry-run不真正运行,只为输出配置信息。 kubectl api-versions #查看api版本 kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort #暴露nginx服务,访问端口80. kubectl get ingress --all-namespaces #查看网关的路由。 kubectl describe pod redis-6fd6c6d6f9-zwvmd -n kubesphere-system #查看指定空间、指定名称的pod的详细信息。 kubectl describe ingress test #查看名为test的路由的详细信息 kubectl delete ingress web #删除名为web的ingress路由 kubectl edit ingress nginx-web#编辑名为nginx-web的路由 kubectl get nodes --show-labels #查看节点的标签 kubectl apply -f nginx.yaml #根据配置文件进行操作 kubectl delete deployment.apps/nginx #删除nginx部署 kubectl delete service/nginx #删除nginx服务