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