Kubernetes基础

发布时间:2022-09-03 11:30

Kubernetes是什么

Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8s
Kubernetes用于容器化应用程序的部署,扩展和管理,目标是让部署容器化应用简单高效。

官方网站:http://www.kubernetes.io

官方文档:https://kubernetes.io/zh/docs/home

Kubernetes集群架构与组件

Kubernetes基础_第1张图片
Kubernetes基础_第2张图片

Master节点

kube-apiserver

Kubernetes API,集群的统一入口,各组件协调者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给 APIServer处理后再提交给Etcd存储。

kube-controller-manager

处理集群中常规后台任务,一个资源对应一个控制器,而 ControllerManager就是负责管理这些控制器的。例如 Deployment、Service

kube-scheduler

根据调度算法为新创建的Pod选择一个Node节点,可以任意部署, 可以部署在同一个节点上,也可以部署在不同的节点上。

etcd

分布式键值存储系统。用于保存集群状态数据,比如Pod、Service 等对象信息。

Node节点

kubelet

kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周 期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态 等工作。kubelet将每个Pod转换成一组容器

kube-proxy

在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作

容器引擎

例如docker、containerd、podman 容器引擎,运行容器。

部署K8S的2种方式

kubeadm

Kubeadm是一个工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。 部署地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

二进制

从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。 下载地址:https://github.com/kubernetes/kubernetes/releases

第三方工具或者Web

kubeadm快速搭建K8s集群

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 容器存储接口

Kubernetes基础_第3张图片

kubeconfig配置文件

kubectl使用kubeconfig认证文件连接K8s集群, 使用kubectl config指令生成kubeconfig文件。

Kubernetes基础_第4张图片

kubectl命令行工具

故障诊断和调试命令

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版本

测试:快速部署一个网站

使用Deployment控制器部署镜像:

kubectl create deployment web-tomcat  --image=tomcat
kubectl get deployment,pods

使用Service将Pod暴露出去:

kubectl expose deployment web-tomcat --port=80 --type=NodePort --target-port=8080 --name=web-tomcat
kubectl get svc

访问应用

http://NodeIP:Port # 端口随机生成,通过kubectl get service获取

基本资源概念

Pod:K8s最小部署单元,一组容器的集合
Deployment:最常见的控制器,用于更高级别部署和管理Pod
Service:为一组Pod提供负载均衡,对外提供统一访问入口
Label :标签,附加到某个资源上,用于关联对象、查询和筛选
Namespaces :命名空间,将对象逻辑上隔离,也利于权限控制

Kubernetes基础_第5张图片

命名空间

命名空间(Namespace):Kubernetes将资源对象逻辑上隔离,从而形成多个虚拟集群。

应用场景
根据不同团队划分命名空间
根据项目划分命名空间
kubectl get namespace
[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常用命令:
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


ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号