一,k8s 容器技术介绍
1 ,定义
- Kubernetes 是一个开源项目,用于统一管理容器化的应用集群。
- Kubernetes 负责在大规模服务器环境中管理容器组(pod)的扩展、复制、健康,并解决 pod 的启动、负载均衡等问题。
2,核心概念
- 用户提交部署请求,K8S会根据调度策略,计算出服务应该调度到哪个节点进行部署;该节点的kubelet会与docker通信,根据策略拉取镜像(从镜像仓库里拉取),然后启动容器
2.1 Master节点
- Master 节点也称为控制节点,每个 k8s 集群都有一个 Master 节点负责整个集群的管理控制,它包含了以下几个组件:
- API Server:提供了 HTTP Rest 接口的服务进程,所有资源对象的增、删、改、查等操作的唯一入口;
- Controller Manager:k8s 集群所有资源对象的自动化控制中心;
- Scheduler:k8s 集群所有资源对象自动化调度控制中心;
- ETCD:k8s 集群注册服务发现中心,可以保存 k8s 集群中所有资源对象的数据。
2.2 Node节点
- Node 节点的作用是承接 Master 分配的工作负载,它主要有以下几个关键组件:
- kubelet:负责 Pod 对应容器的创建、启停等操作,与 Master 节点紧密协作;
- kube-porxy:实现 k8s 集群通信与负载均衡的组件。
2.3 Pod
- Pod 是 k8s 最基本的操作单元,它是容器的一个上层包装结构。
- Pod 可包含多个容器在里面,每个 Pod 至少会有一个 Pause 容器,其它用户定义的容器都共享该 Pause 容器,Pause 容器的主要作用是用于定义 Pod 的 ip 和 volume。
2.4 Label 标签
- 例如 Node、Pod、Replica Set、Service 等,一个资源可以绑定任意个 Label,k8s 通过 Label 可实现多维度的资源分组管理,后续可通过 Label Selector 查询和筛选拥有某些 Label 的资源对象,例如创建一个 Pod,给定一个 Label,workerid=123,后续可通过 workerid=123 删除拥有该标签的 Pod 资源。
2.5 deployment
- deployment 目的是为了定义一个期望的场景,比如定义某种 Pod 的副本数量在任意时刻都处于 Peplica Set 期望的值
- 假如定义 Pod 的副本数目为:replicas=2,当该 Replica Set 提交给 Master 后,Master 会定期巡检该 Pod 在集群中的数目,如果发现该 Pod 挂掉了一个,Master 就会尝试依据 Replica Set 设置的 Pod 模版创建 Pod,以维持 Pod 的数量与 Replica Set 预期的 Pod 数量相同。
2.6 service
- Service 就是我们平时所提及的微服务架构中的“微服务”, Pod、Replica Set 等都是为 Service 服务的资源
- Service 定义了一个服务访问的入口,客户端通过这个入口即可访问服务背后的应用集群实例,而 Service 则是通过 Label Selector 实现关联与对接的,deployment 保证服务集群资源始终处于期望值。
2.7 Liveness 和 Readness
-
Liveness:隔一段时间探查服务接口, 如果探查失败, 证明服务不健康,这时候会杀掉pod,Deployment则会在杀死pod后,重新尝试拉起一个新的。 这个时候service 会把老pod的IP地址移除掉,把新pod的ipd地址 加到ip池中。
-
Readness: 每隔一段时间探查服务接口,如果探查失败, 证明服务不健康, 这时候不会杀掉pod,只是service会把这个pod的ip地址移除掉, 以便之后的流量不会再打入到这个不健康pod中。 在这之后探针会继续运行,一旦探针判断这个pod重新恢复了健康状态, 就会把这个pod的ip加回来, 继续发送流量。
二,k8s 安装与部署
* kubeadm init \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version
v1.13.3 \--pod-network-cidr=10.244.0.0/16
* kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/D
ocumentation/kube-flannel.yml
- 删除污点
* kubectl get nodes 查看节点
* kubectl taint nodes 节点名称 node-role.kubernetes.io/master:NoSchedule-
三,kubectl 管理命令
- kubectl {动作} {资源}
- kubectl get pods
- kubectl get nodes
- kubectl create -f {文件名称} 创建文件
- kubectl apply -f {文件名称} 创建文件(常用)
四,dashboard 使用
- 安装k8s的图形界面工具dashboard :k8dash - 强大的k8s dashboard - 知乎
- 配置文件:https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml
- 文件参数:
- kind:资源类型,Deployment
- replicas:资源期望维持的副本pods数量
- spec:pod的详情信息