本文对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
配置文件:
安装过程中用到的配置文件。
安装前置条件
- 一台或多台机器,操作系统Centos7。
- 硬件配置:3072MB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多。
- 各节点网络通畅。
所有节点下的操作
操作系统设置
| 1 | bash复制代码#修改时区 | 
设置阿里云Centos镜像源
| 1 | bash复制代码wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo | 
安装Docker
| 1 | bash复制代码#依赖 | 
安装 kubectl、kubeadm、kubelet
| 1 | ini复制代码cat <<EOF > /etc/yum.repos.d/kubernetes.repo | 
| 1 | 复制代码yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3 | 
| 1 | bash复制代码systemctl enable kubelet && systemctl start kubelet | 
主节点下的操作
镜像拉取
| 1 | 复制代码sh master_images.sh | 
初始化主节点
其中apiserver-advertise-address 要换成自己的IP。
| 1 | ini复制代码kubeadm init \ | 
安装正常时的返回结果:
| 1 | bash复制代码Your Kubernetes control-plane has initialized successfully! | 
执行返回结果中的命令
| 1 | bash复制代码 mkdir -p $HOME/.kube | 
pod进度监控
新开个ssh窗口监视pod安装进度
| 1 | sql复制代码watch kubectl get all --all-namespaces -o wide | 
安装网络插件
| 1 | 复制代码kubectl apply -f kube-flannel.yml | 
子节点加入集群
主节点中建立TOKEN
| 1 | lua复制代码kubeadm token create --print-join-command | 
子节点执行,执行返回结果中的命令,加入集群
| 1 | sql复制代码kubeadm join 192.168.31.201:6443 --token sg47f3.4asffoi6ijb8ljhq \ | 
| 1 | csharp复制代码[preflight] Running pre-flight checks | 
在主节点查看集群的node
| 1 | sql复制代码kubectl get nodes | 
部署Ingess
| 1 | 复制代码kubectl apply -f ingress-controller.yaml | 
部署一个nginx
以nginx为例测试Ingress
| 1 | css复制代码kubectl create deployment nginx --image=nginx | 
用Ingress暴露一个服务
| 1 | 复制代码kubectl apply -f nginx-ingress.yaml | 
通过Ingress访问 Nginx服务
浏览器里通过 nginx.dev.com 访问。
这里Ingress 用域名 nginx.dev.com 暴露的Nginx服务。需要修改本地host文件,把域名映射到部署了ingress的节点的可访问IP。
KuberSphere 安装
在主节点最小化安装。
安装openebs
Kubernetes的存储方案
删除污点,node201 换成你自己的master hostname。
| 1 | bash复制代码kubectl taint nodes node201 node-role.kubernetes.io/master:NoSchedule- | 
建立命名空间、安装
| 1 | arduino复制代码kubectl create ns openebs | 
等待安装结束
| 1 | arduino复制代码kubectl get sc | 
| 1 | sql复制代码NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE | 
设置默认storageclass
| 1 | kotlin复制代码kubectl patch storageclass openebs-hostpath -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' | 
| 1 | bash复制代码storageclass.storage.k8s.io/openebs-hostpath patched | 
安装完成后还原污点
| 1 | ini复制代码kubectl taint nodes node201 node-role.kubernetes.io/master=:NoSchedule | 
安装kubesphere
| 1 | 复制代码kubectl apply -f kubesphere-installer.yaml | 
查看安装日志
| 1 | sql复制代码kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f | 
等待几分钟的时间、日志出现下面内容就可以访问了。
| 1 | csharp复制代码##################################################### | 
结语
完成集群搭建后,可阅读 Kubernetes、KuberSphere官方文档。做进一步探索,如高可用的Kubernetes集群、KuberSphere完整的DEVOPS流。
附录
常用命令例子
| 1 | ini复制代码kubectl get all --all-namespaces -o wide #查看集群所有资源 | 
本文转载自: 掘金