k8s组件
架构图

1636466520548.png
Master组件
kube-apiserver
001 Kubernetes API,集群的统一入口
002 各组件协调者,以RESTful
003 API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer
004 APIServer处理后再提交给Etcd存储
kube-controller-manager
001 处理集群中常规后台任务
002 一个资源对应一个控制器,ControllerManager就是负责管理这些控制器的。
003 比如:容器部署,副本管理
kube-scheduler
001 根据调度算法为新创建的Pod选择一个Node节点
002 可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上
etcd
001 分布式键值存储系统
002 用于保存集群状态数据,比如Pod、Service等对象信息
003 etcd数据库属于单独的组件
Node组件
kubelet
001 kubelet是Master在Node节点上的Agent
002 管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。003 kubelet将每个Pod转换成一组容器
kube-proxy
在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作
docker或rocket
容器引擎,运行容器。
CNI网络模型
网络模型

1636600296944.png
网络组件要求
K8s是一个扁平化网络,即所有部署的网络组件都必须满足如下要求:
001 一个Pod一个IP
002 所有的 Pod 可以与任何其他 Pod 直接通信
003 所有节点可以与所有 Pod 直接通信
004 Pod 内部获取到的 IP 地址与其他 Pod 或节点与其通信时的 IP 地址是同一个
----------------------------------------------------------------------------------
主流网络组件有:Flannel、Calico等
kubeconfig配置文件
文件配置

1636601027339.png
001 kubectl使用kubeconfig认证文件连接K8s集群
002 current-context: kubernetes-admin@kubernetes
node节点执行kubectl命令
#将配置文件从master复制到node
[root@k8smaster ~]# scp -r /etc/kubernetes/admin.conf root@192.168.153.22:/root
#node执行
[root@k8snode1 ~]# ls
admin.conf
[root@k8snode1 ~]# kubectl get node --kubeconfig=admin.conf
NAME STATUS ROLES AGE VERSION
k8smaster Ready master 11d v1.19.0
k8snode1 Ready node 11d v1.19.0
#或者将该配置文件复制到指定的位置
[root@k8snode1 ~]# mkdir -p $HOME/.kube
[root@k8snode1 ~]# sudo cp -i admin.conf $HOME/.kube/config
[root@k8snode1 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@k8snode1 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8smaster Ready master 11d v1.19.0
k8snode1 Ready node 11d v1.19.0
基本资源
Pod
Pod:K8s最小部署单元,一组容器的集合
Deployment
Deployment:最常见的控制器,用于更高级别部署和管理Pod
#使用Deployment控制器部署镜像:
[root@k8smaster ~]# kubectl create deployment web --image=lizhenliang/java-demo
[root@k8smaster ~]# kubectl get deploy,pods
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/web 1/1 1 1 6m30s
NAME READY STATUS RESTARTS AGE
pod/web-674477549d-9mtlc 1/1 Running 0 6m30s
#查看资源信息
[root@k8smaster ~]# kubectl describe pod web-674477549d-9mtlc
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 9m9s default-scheduler Successfully assigned default/web-674477549d-9mtlc to k8snode1
Normal Pulling 9m8s kubelet, k8snode1 Pulling image "lizhenliang/java-demo"
Normal Pulled 7m41s kubelet, k8snode1 Successfully pulled image "lizhenliang/java-demo" in 1m26.918609395s
Normal Created 7m41s kubelet, k8snode1 Created container java-demo
Normal Started 7m41s kubelet, k8snode1 Started container java-demo
001 分配节点
002 下载镜像
003 创建容器
004 容器启动
Service
001 为一组Pod提供负载均衡,对外提供统一访问入口
002 该组pod拥有相同的标签
[root@k8smaster ~]# kubectl scale deployment web --replicas=3
[root@k8smaster ~]# kubectl expose deployment web --port=80 --target-port=8080 --type=NodePort
#此时,svc为deployment为web的3个pod做负载均衡
[root@k8smaster ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
web NodePort 10.100.231.77 <none> 80:31588/TCP 2m7s
[root@k8smaster ~]# curl 10.100.231.77
#可以在浏览器访问
http://192.168.153.21:31588/

1636637626292.png
Label
标签,附加到某个资源上,用于关联对象、查询和筛选
[root@k8smaster ~]# kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-6799fc88d8-764c4 1/1 Running 10 11d app=nginx,pod-template-hash=6799fc88d8
nginx-log-demo-95677644f-dtdhh 2/2 Running 4 5d2h app=gateway,pod-template-hash=95677644f,project=microservice
web-674477549d-94jlv 1/1 Running 0 8m52s app=web,pod-template-hash=674477549d
web-674477549d-9mtlc 1/1 Running 0 21m app=web,pod-template-hash=674477549d
[root@k8smaster ~]# kubectl get pod -l app=web
NAME READY STATUS RESTARTS AGE
web-674477549d-94jlv 1/1 Running 0 10m
web-674477549d-9mtlc 1/1 Running 0 23m
Namespaces
概述
命名空间,将对象逻辑上隔离,从而形成多个虚拟集群。
应用场景
001 根据不同团队划分命名空间
002 根据项目划分命名空间
查看命名空间
[root@k8smaster ~]# kubectl get namespace
NAME STATUS AGE
default Active 11d
kube-node-lease Active 11d
kube-public Active 11d
kube-system Active 11d
kubernetes-dashboard Active 11d
两种方法指定资源命名空间
命令行加 -n
yaml资源元数据里指定namespace字段
[root@k8smaster ~]# kubectl create namespace test
namespace/test created
[root@k8smaster ~]# kubectl get namespace
...
test Active 4s
网友评论