Kubernetes, also known as K8s, is an open source system for automating deployment, scaling, and management of containerized applications.
Kubernetes,也称为k8,是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。
使用go语言编写https://github.com/kubernetes/kubernetes
目前最高版本是v1.30 https://kubernetes.io/zh-cn/
Google 15 年生产环境的运维经验-->borg系统 不是开源的
借鉴borg系统 ,使用go语言开发了k8s
针对k8s方向的技术,统称为云原生技术 ---》CNCF --》云原生计算基金会
v1.23 前版本都默认使用docker作为容器运行时软件
v1.24 后默认使用containerd作为容器运行时软件,边缘化docker,但是还是支持docker
API 服务器是 Kubernetes 控制平面的组件, 该组件负责公开了 Kubernetes API,负责处理接受请求的工作。 API 服务器是 Kubernetes 控制平面的前端。6443端口 k8s集群入口
- `etcd` 保存了整个集群的状态;一致且高可用的键值存储,用作 Kubernetes 所有集群数据的后台数据库。
- `kube-apiserver` 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制;
- `kube-controller-manager` 负责维护集群核心对象的状态,比如故障检测、自动扩展、滚动更新等;
- `kube-scheduler` 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;
- `kubelet` 负责维持容器的生命周期,同时也负责 Volume(CVI)和网络(CNI)的管理;调用docker去启动需要的容器,单独的程序,不在容器而在宿主机运行
- `Container runtime` 负责镜像管理以及 Pod 和容器的真正运行(CRI),默认的容器运行时为 Docker;
- `kube-proxy` 负责为 Service 提供 cluster 内部的服务发现和负载均衡;
-‘kube-proxy’单独的Pod 在宿主机运行,网络代理,网络数据的进去和出去(snat,dnat),负载均衡(ipvs,iptables)
DNS:coredns集群里进行域名解析的
网络通信插件:calico(大规模),flannel(小规模),terway
1.docker和k8s的关系?
容器技术:
底层技术: linux 内核实现的 --》lxc linux的容器技术
命名空间--》隔离
cgroup --》资源的控制,例如:cpu,内存,磁盘IO
LXC,就是Linux容器虚拟技术(Linux container)
Core OS --》Rocket
docker --》docker ---》一家独大 --》制定标准
容器技术的优势:
1.资源消耗少 启动速度 .扩展非常方便 管理非常方便
巨头: Google ,ibm,redhat等
cncf 云原生基金会--》google,微软、Red Hat、IBM、Docker、CoreOS、 Mesosphere和Saltstack 等公司,相继加入K8S。 VMware、HP、Intel等公司,也陆续加入。
K8S,就是基于容器的集群管理平台,它的全称,是kubernetes
cncf 云原生基金会 --》prometheus 第2个项目
2.swarm和k8s的区别?
swarm 是docker公司自己搞的 基于容器的集群管理平台
k8s--》CNCF
k8s为什么能赢swarm?
1.背后的大佬多
2.性能和功能有优势
3.生态系统的考虑,未来的更新和发展
k8s刚刚出来需要推广,需要得到认可--》底层的容器管理使用docker --》借势docker发展
k8s 得到认可后 跳过docker 直接使用containd可以实现容器技术,所以在1.23版本后不用docker
4.为什么使用容器技术会节约成本?
各大互联网公司都在推容器化--》节约成本:硬件的使用率和饱和度问题得到提升,人力的运维成本
nfs不是特别合适的解决方案:
1.nfs使用传统的网络 : 如果网络速度不快,数据在传输的过程中有延迟或者丢失
使用SAN(存储区域网络)
常用命令
- kubectl create deployment
- kubectl get pod -o wide
- node -o wide
- rs 副本控制器
- deployment deploy
- ns namespace
- services svc
- kubectl describe 查询详细信息
- Troubleshooting 故障排查 解决故障
- kubectl logs
- kubectl exec -it -- bash进入容器内部
- kubectl cluster-info
- kubectl apply -f *.yml
- kubectl delete
- kubectl explain yaml文件的作用:就是给k8s传递参数,告诉k8s的控制器如果去创建资源 启动资源的时候,使用yaml文件去启动,这个文件里的指令有什么作用,哪些需要接,哪些不需要接
- kubectl explain ResourceQuota.metadata
- kubectl top node 查看cpu和内存的使用
- kubectl api-resources 查看k8s内部有哪些资源类型和接口版本