一、了解学习k8s的过程
1、基础概念:什么是pod 控制器类型 k8s 网络通讯模式
2、构建K8S集群
3、资源清单:掌握资源清单的语法,编写pod 掌握pod的生命周期
4、pod控制器:掌握各种控制器的特点以及使用,常用deployment
5、服务发现:掌握svc(service)原理及其构建方式
6、存储:掌握多种存储类型的特点,并且能够在不同环境中选择合适的存储方案
7、调度器:掌握调度器原理,能够根据要求把pod定义到想要的节点运行
8、安全:集群的认证,鉴权,访问控制原理及其流程
9、HELM:类似linux yum,掌握HELM原理,HELM模板自定义,HELM部署一些常用插件
10、运维:修改kubeadm达到证书可用期限为10年,能够构建高可用的kubenetes集群
二、一般名词解析及其作用
apiserver 所有服务的入口
crontrollermanager 维持副本期望数目
scheduler: 负责介绍任务,选择合适的节点进行分配任务
etcd:键值对数据库,储存K8S集群所有重要信息
kubelet:直接跟容器引擎交互实现容器的生命周期管理
kube-proxy:负责写入规则至iptables,ipvs,实现服务映射访问的
coredns 可以为集群中的svc创建要给域名IP对应关系解析
dashboard 给k8s集群提供一个b/s结构访问体系
ingree controller 官方只能实现四层dialing,ingress可以实现七层代理
federation 提供一个可以跨集群中心多k8s统一管理功能
prometheus,提供k8s集群的监控能力
elk:提供k8s集群日志统一分析入口
flannel是最常用的网络服务,对网络进行规划建立一个覆盖网络
三、Kubernetes主要由以下几个核心组件组成:
etcd保存了整个集群的状态;
apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;
除了核心组件,还有一些推荐的Add-ons:
kube-dns负责为整个集群提供DNS服务
Ingress Controller为服务提供外网入口
Heapster提供资源监控
Dashboard提供GUI
Federation提供跨可用区的集群
Fluentd-elasticsearch提供集群日志采集、存储与查询
四、常用的一些k8s命令
kubectl create ns test #创建空间
kubectl get deployment -n test #查看运行deployment 信息
kubectl delete deployment “名称” -n test #删除deployment
kubectl get pod -n test -o wide #查看运行pod详细信息
kubectl describe pod/"pod名称" -n test #查看某个pod详情
kubectl get svc -n test #查看pod对应的地址和端口映射
kubectl get ing -n test #查看ing对应的pod名
kubectl apply -f sdk.crevalue.cn.yaml #创建pod
kubectl delete -f sdk.crevalue.cn.yaml #删除pod
kubectl get node #查看集群
kubectl describe node #查看集群服务器信息
kubectl delete ing/“名称” -n test # 删除pod对应的ingress
kubectl delete svc/“名称” -n test #删除pod对应的svc
kubectl delete deploy “名称” -n test #删除pod对应的deploy
kubectl logs pod “名称” -n test #查看pod日志
kubectl exec -it pod/“名称” -n test -- bin/bash #进入docker,退出时不会停止容器
kubectl get pods --all-namespaces ###查看所有pod信息
kubectl get cs # 查看集群健康状态
kubectl get deployment --all-namespaces # 获取所有deployment
kubectl get rc,services # 查看rc和servers
kubectl logs “名称”-n test # 查看pod日志需要指定命名空间
kubectl exec -it pod/“名称” -n test -- bin/bash # 进入docker,退出时不会停止容器
kubectl get pods --all-namespaces #查看具体pods,记得后边跟namespace名字哦
kubectl get deployment --all-namespaces # 获取所有deployment
kubectl get pods --include-uninitialized # 列出该 namespace 中的所有 pod 包括未初始化的
kubectl get rc,services # 查看rc和servers
kubectl cluster-info # 集群核心组件运行情况
kubectl version # 查看kubulet版本
kubectl api-versions # 查看一些API版本
kubectl get events # 查看node节点事件
kubectl get nodes #获取全部节点
kubectl delete node k8s2 #删除节点
kubectl expose rc nginx --port=80 --target-port=8000 #为 nginx RC 创建服务,启用本地 80 端口连接到容器上的 8000 端口