Kubernetes基础知识
1 Kubernetes简介
1.1 what && where && why?
1.1.1 what?
首先我们来回答第一个问题,什么是Kubernets?
答曰:它是一个为 容器化 应用提供集群部署和管理的开源工具,由 Google 开发。
Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”,处于方便我们一般称它为k8s
。k8s
这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Kubernetes 项目。
1.1.2 where?
第二个问题,什么情况下我们需要用到k8s
?
答曰:当你的应用需要跑在很多机器上,每次增加机器、软件更新、版本回滚都会变得非常麻烦。这时候就需要k8s
来管理这种百万千万台机器集群而不是每台机器单独手动配置。Kubernetes 可以为你提供集中式的管理集群机器和应用,加机器、版本升级、版本回滚,那都是一个命令就搞定的事,不停机的灰度更新,确保高可用、高性能、高扩展。
1.1.3 why?
最后灵魂疑问,为什么选择k8s
呢?
在超大集群的背景下,k8s
具有以下非常动人的特性:
- 高可用,不宕机,自动灾难恢复
- 灰度更新,不影响业务正常运转
- 一键回滚到历史版本
- 方便的伸缩扩展(应用伸缩,机器加减)、提供负载均衡
- 有一个完善的生态
1.2 k8s重要概念
1.2.1 k8s集群架构
k8s由主节点(master)和工作结点(worker)组成.
master node:
主节点,控制平台,不需要很高性能,不跑任务,通常一个就行了,也可以开多个主节点来提高集群可用度
worker node:
工作节点,可以是虚拟机或物理计算机,任务都在这里跑,机器性能需要好点;通常都有很多个,可以不断加机器扩大集群;每个工作节点由主节点管理
基础包含关系:
首先我们先来学习一下几个概念:
Node:Node是Pod真正运行的主机,可以物理机,也可以是虚拟机。为了管理Pod,每个Node节点上至少要运行container runtime(比如docker或者rkt)、kubelet和kube-proxy服务。
Pod:在k8s
中,最小的管理元素不是一个个独立的容器,而是Pod,Pod是最小的,管理,创建,计划的最小单元.一个 Pod 可以包含一个或多个容器,每个 Pod 有自己的虚拟IP。一个工作节点可以有多个 pod,主节点会考量负载自动调度 pod 到哪个节点运行。
Pod 的context可以理解成多个linux命名空间的联合:
- PID 命名空间(同一个Pod中应用可以看到其它进程)
- 网络 命名空间(同一个Pod的中的应用对相同的IP地址和端口有权限)
- IPC 命名空间(同一个Pod中的应用可以通过VPC或者POSIX进行通信)
- UTS 命名空间(同一个Pod中的应用共享一个主机名称)
Node和Pod的关系:每个Node都包括以下状态信息
地址:包括hostname、外网IP和内网IP
条件(Condition):包括OutOfDisk、Ready、MemoryPressure和DiskPressure
容量(Capacity):Node上的可用资源,包括CPU、内存和Pod总数
基本信息(Info):包括内核版本、容器引擎版本、OS类型等
如果node 被删除,所拥有的Pod会自动分流到其他的Node,但是存在特殊的无法被分流的Pod
1.2.2 k8s组件
kube-apiserver
API 服务器,公开了 Kubernetes APIetcd
键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库kube-scheduler
调度 Pod 到哪个节点运行kube-controller
集群控制器cloud-controller
与云服务商交互
基于Azure的K8s创建与连接
在进行下面操作之前首先你得注册Azure并获取订阅(可能需要抽点血,慎重哈🤣)
2.1 命令行操作
首先进入官网,打开命令行bash,输入下面的两行命令
1 | location=eastus #声明地点是us东部 |
创建完成后会输出资源组配置信息如下:
1 | { |
在接着我们需要在这个新建的资源组K8s_test1
下创建k8s
的一个集群,所以需要输入以下命令:
1 | az aks create --resource-group K8s_test1 --name K8sCluster1 --node-count 1 --generate-ssh-keys --node-vm-size=Standard_B2s --disable-rbac |
其中--resource-group
后面的参数就是你想将集群放置的资源组的名称,也就是第一步创建的资源组名称,我这里是K8s_test1
,而--name
后的参数则是你想创建的这个集群的名字,这里我叫K8sCluster1
,--node-count
顾名思义就是集群中worker node的个数(至于master node是托管给Azure管的),--node-vm-size
是worker node的参数,这里我们选择了最便宜的主机
创建过程看你配置,如果你很老实按上面的操作,这边的话应该5-7min就可以。
不出意外的话,控制台会输出你的ssh-keys生成地址目录和集群的相应信息大致如下:
1 | SSH key files '/home/[用户名]/.ssh/id_rsa' and '/home/[用户名]/.ssh/id_rsa.pub' have been generated under ~/.ssh to allow SSH access to the VM. If using machines without permanent storage like Azure Cloud Shell without an attached file share, back up your keys to a safe location |
下一步我们需要连接我们刚刚用命令行创建的K8s的这个集群,需要在命令行输入:
1 | az aks get-credentials --resource-group=K8s_test1 --name=K8sCluster1 |
接着输入
1 | kubectl get nodes |
就可以看到自己部署的worker nodes的信息
2.2 UI界面操作
等待更新
参考资料
1、视频资源:
- 喜得Sid【K8s简介】
2、文档资料