一、什么是kubernetes

kubernetsy用于管理容器化的workloads和服务,代表用户的workloads去协调计算、网络、存储设施。1个K8s集群,由许多的nodes组成。一些nodes称之为master nodes,另一些nodes为worker nodes。Master nodes是用于管理和控制集群,worker nodes包含各种应用服务。

image


二、Pods

Pods是kubernets的基本概念之一。1个微服务通常包含1个或者多个container,当这些container部署到kubernets中时,被部署到称之为Pod的东西中。1个Pod可以部署1个或者多个container,他们共享storage、network、如何运行container等。1个Pod的内容经常需要co-located、co-scheduled,运行在共享的context中。

更多k8s概念,https://kubernetes.io/docs/concepts/workloads/


三、k8s的组件

A.master nodes的组件主要是用于控制管理cluster,和worker nodes的组件主要是用于Pods运行和使得他们可以被使用。
Master nodes的组件主要有:
a. Kube-apiserver:k8s控制面板的前端,用于编排cluster。
b. Kube-scheduler:k8s的调度器,把Pods调度到合适的Node上。
c. Kube-controller:k8s集群管理控制器。控制期望的state总是keep的。如果你定义了1个pod的3个拷贝,那么集群控制器会保证3个拷贝都运行在集群中的某个地方。
d. kube-scheduler将会决定1个pod从哪个Node开始启动。
e. Etcd:集群数据的存储。


worker nodes的组件有:
Kubelet: 保证container运行在pod中
Kube-proxy:  Network proxy维护nodes上的network rules,转发connection.
Container runtime: 运行container的软件。k8s支持任何符合OCI (Open Container Initiative)的container runtime。这里docker被作为container runtime。
组件更多内容,https://kubernetes.io/docs/concepts/overview/components/


四、k8s的集群管理工具

通过不同的工具来实现达到管理k8s的目的,其中之一就是Helm,使用Helm可以部署k8s微服务。kubectl这个命令经常用来管理集群。

kubectl get nodes -n namespace
kubectl describe node <node id> -n namespace
kubectl describe pods <pod name> -n namespace
kubectl logs <pod name> 
kubectl exec <pod name> -- ps -ef

常用命令参考:https://kubernetes.io/docs/reference/kubectl/cheatsheet/


五、k8s集群管理控制器

K8s通过所谓的controllers来部署和控制微服务。主要有3种控制器:
Deployments
https://kubernetes.io/docs/concepts/workloads/controllers/deployment/

StatefulSets
https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

DaemonSet
https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/


查看集群种k8s controllers

kubectl get deployments  -n namespace
kubectl get statefulsets -n namespace
kubectl get daemonsets -n namespace


六、k8s微服务

1个k8s服务定义了Pods上的1个逻辑上的set如何被acess和使用的。Pods可以被动态的创建、销毁,这意味着1个Pod的IP地址将会改变。另一方面,k8s服务却是永久的,那么会指向其他可用的Pod。 对于1个服务
你可以指定:

ClusterIP:默认的ServiceType,将会在集群内部暴露服务。
NodePort: 向外部暴露每个Node上的服务,把NodePort作为静态的port,可以从集群外部接入微服务。
LoadBalancer:用云服务的提供商的loadbalancer向外部暴露服务。
ExternalName:map k8s的微服务到DNS name

常用命令

kubectl get services –n namespace
curl -s <IP>:<PORT>/serviceName

posted on 2021-10-26 19:04  维也纳下午茶  阅读(108)  评论(0编辑  收藏  举报