本文对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 #查看集群所有资源 |
本文转载自: 掘金