发布时间:2022-09-03 11:30
官方网站:http://www.kubernetes.io
官方文档:https://kubernetes.io/zh/docs/home
Kubernetes API,集群的统一入口,各组件协调者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给 APIServer处理后再提交给Etcd存储。
处理集群中常规后台任务,一个资源对应一个控制器,而 ControllerManager就是负责管理这些控制器的。例如 Deployment、Service
根据调度算法为新创建的Pod选择一个Node节点,可以任意部署, 可以部署在同一个节点上,也可以部署在不同的节点上。
分布式键值存储系统。用于保存集群状态数据,比如Pod、Service 等对象信息。
kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周 期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态 等工作。kubelet将每个Pod转换成一组容器
在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作
例如docker、containerd、podman 容器引擎,运行容器。
Kubeadm是一个工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。 部署地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。 下载地址:https://github.com/kubernetes/kubernetes/releases
1、安装Docker
2、创建一个 Master 节点 kubeadm init
3、将一个 Node 节点加入到当前集群中 kubeadm join
4、部署容器网络(CNI) kubectl apply -f calico.yaml
5、部署Web UI(Dashboard)
部署网络组件的目的是打通Pod到Pod之间网络、Node与Pod之间网络,从而集群中数据包可以任意传输,形成了一 个扁平化网络。
主流网络组件有:Flannel、Calico等 而所谓的CNI( Container Network Interface,容器网络接口)就是k8s对接这些第三方网络组件的接口
CNI:容器网络接口
CRI:容器运行时
CSI 容器存储接口
describe ## 显示资源详细信息
logs ##查看Pod内容器日志,如果Pod有多个容器,-c参数指定容器名称
attach ##附加到Pod内的一个容器
exec ##在容器内执行命令
port-forward ##为pod创建本地端口映射
proxy ##为Kubernetes API server创建代理
cp ##拷贝文件或目录到容器中,或者从容器内向外拷贝
auth ## 检查授权
debug ##创建调试会话,用于排查工作负载和工作节点故障
diff ## 将在线配置与指定的文件对比
apply ##从文件名或标准输入对资源创建/更新
patch ##使用补丁方式修改、更新资源的某些字段
replace ##从文件名或标准输入替换一个资源
kustomize ##从目录或者URL构建kustomization目标
label ##给资源设置、更新标签
annotate ##给资源设置、更新注解
completion ##kubectl工具自动补全,source <(kubectl completion bash) (依赖软件包 bash-completion)
api-resources ##查看所有资源
api-versions ##打印受支持的API版本
config ##修改kubeconfig文件(用于访问API,比如配置认证信息)
version ## 查看kubectl和k8s版本
kubectl create deployment web-tomcat --image=tomcat
kubectl get deployment,pods
kubectl expose deployment web-tomcat --port=80 --type=NodePort --target-port=8080 --name=web-tomcat
kubectl get svc
http://NodeIP:Port # 端口随机生成,通过kubectl get service获取
[root@k8s-master ~]# kubectl get namespace
NAME STATUS AGE
aliang-cka Active 119d
default Active 130d
kube-node-lease Active 130d
kube-public Active 130d
kube-system Active 130d
kubernetes-dashboard Active 130d
default:默认命名空间
kube-system:K8s系统方面的命名空间
kube-public:公开的命名空间,谁都可以访问
kube-node-lease:K8s内部命名空间
两种方法指定资源命名空间:
命令行加 -n
yaml资源元数据里指定namespace字段
kubectl常用命令:
kubectl create 创建一个资源,例如namespace、deployment、ingress
例如:kubectl create deployment web2 --image=lizhenliang/java-demo
kubectl expose 为deployment创建service(虚拟负载均衡器)
例如:
kubectl expose deployment web2 --port=80 --target-port=8080 --type=NodePort
--port 代表service端口(暂时用不到)
--target-port 代表容器中服务端口,例如nginx默认是80、tomcat默认是8080
--type 代表service类型,NodePort就是让集群外部浏览器访问的(通过kubectl get service查看)
kubectl delete 删除各种资源,例如deployment、service
例如:kubectl delete service web2
kubectl scale deployment web --replicas=100 # 将deployment副本数调整为100个
kubectl describe node k8s-node1 # 查看节点详情
kubectl describe pod web-969b69cd7-6drvh # 查看Pod详情
kubectl get pods -o wide # 查看pod更多信息
kubectl get pods web-969b69cd7-6drvh -o yaml # 导出yaml配置
查看集群资源利用率(前提必须装metric-server):
kubectl top pod/node
kubectl logs metrics-server-5496875b8d-kkm25 -n kube-system # 查看容器日志
kubectl get 关于标签使用有两个参数:
--show-labels # 查看pod所有标签
-l # 根据指定标签过滤查看pod
master和node怎么区分的?
根据部署的组件区分的
master:apiserver、controller-manager、scheduler
node:kubelet、kube-proxy
metrics-server-5496875b8d-kkm25 -n kube-system # 查看容器日志
kubectl get 关于标签使用有两个参数:
–show-labels # 查看pod所有标签
-l # 根据指定标签过滤查看pod
master和node怎么区分的?
根据部署的组件区分的
master:apiserver、controller-manager、scheduler
node:kubelet、kube-proxy
MindSpore易点通·精讲系列--数据集加载之CSVDataset
使用BERT + Bi-LSTM + CRF 实现命名实体识别
一文解析Pinia和Vuex,带你全面理解这两个Vue状态管理模式
XMeter Newsletter 2022-06|企业版 v3.2.3 发布,错误日志与测试报告图表优化
Go微服务框架go-kratos实战03:使用 gorm 实现增删改查操作
SQL Server一个字符串拆分多行显示或者多行数据合并成一个字符串
机器学习(3)--正则化及python源码(附练习数据资源文件百度云)
vue——解决父子组件传值,子组件改变值后父组件的值也会随之改变