2020-03-03 17:47:57    49    0    0

K8S

简介

介绍

  1. K8S是为生产、开发环境设计的容器关系系统。如果把所有的计算节点+存储服务+网络 当做一个集群,K8S就是

提供了一个对集群内资源统一管理的平台。

概念介绍

  1. 在开始了解K8S之前,需要对K8S系统中的几个概念有一个初步的了解

Node

  1. Node就是一个实际的计算节点,他可能是一台云主机、虚拟机,或者是一台实体机

Container

  1. 容器就是应用进程运行的环境,和Docker中的容器是相同的概念

Pod

  1. 容器组,顾明思议就是一个或者是多个功能具有关联性的容器的组合+存储资源。
  2. 他是对容器的一层封装,K8S通过这种方式为处在一个Pod中的容器提供统一的服务,比如网络,CPU,内存,
  3. 在一个pod中的容器之间,上述的资源都是共享的。
  4. pod也是K8S实际调度的最小单位,他不是一个实体,是一个抽象的概念。

Service

  1. service也是一个抽象的概念,他是对一组pod的抽象,并提供对处在他下面的一组pod做流量的负载、分发。
  2. 在创建Service的时候,通过设置配置文件中的 spec.type 字段的值,可以以不同方式向外部暴露应用程序:
  3. ClusterIP(默认)
  4. 在群集中的内部IP上公布服务,这种方式的 Service(服务)只在集群内部可以访问到
  5. NodePort
  6. 使用 NAT 在集群中每个的同一端口上公布服务。这种方式下,可以通过访问集群中任意节点+端口号的方式访问服务 <NodeIP>:<NodePort>。此时 ClusterIP 的访问方式仍然可用。
  7. LoadBalancer
  8. 在云环境中(需要云供应商可以支持)创建一个集群外部的负载均衡器,并为使用该负载均衡器的 IP 地址作为服务的访问地址。此时 ClusterIP NodePort 的访问方式仍然可用。

Namespace

  1. 命名空间,用来区分因为功能划分、服务类型、团队、项目不同,
2020-03-03 17:47:54    65    0    0

说明

client-go 是K8S提供的用于对K8S进行二次开发的接口 golang版本
GitHub地址 https://github.com/kubernetes/client-go

使用说明

  • 直接的使用可以参考官网中的实例,这里只对几个关键的点进行说明

代码展示

  1. var kubeconfig *string //k8s配置文件路径,这个根据实际的情况进行配置即可
  2. // use the current context in kubeconfig
  3. config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig) //创建一个config对象
  4. if err != nil {
  5. panic(err.Error())
  6. }
  7. // create the clientset
  8. clientset, err := kubernetes.NewForConfig(config) //创建一个clientset
  9. if err != nil {
  10. panic(err.Error())
  11. }
  12. //service接口 获取所有的service
  13. service,err:= clientset.CoreV1().Services("default").List(metav1.ListOptions{
  14. LabelSelector:"app=mongodb",
  15. FieldSelector:"metadata.resourceVersion=666572",
  16. })
  17. if err != nil{
  18. fmt.Printf("获取serverice 失败\n",err.Error())
  19. panic(err.Error())
  20. }
  21. fmt.Printf("获取到的service长度[%d]\n", len(service.Items))
  22. for index:=0; index < len(service.
2020-01-22 16:14:33    730    0    0

说明 在使用client-go 在对K8S中的资源进行监听时,一段时间就会断开连接,本文对此问题记性记录

常规用法

  1. func PodWatch(watcher watch.Interface,containerName string){
  2. for {
  3. select {
  4. case msg:=<- watcher.ResultChan():
  5. event:= msg.DeepCopy()
  6. podsobj:= event.Object.(*v1.Pod)
  7. hostip:= podsobj.Status.HostIP
  8. podip:= podsobj.Status.PodIP
  9. }
  10. }
  11. }
  12. func main() {
  13. var kubeconfig *string
  14. if home := ""; home != "" {
  15. kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file")
  16. } else {
  17. kubeconfig = flag.String("kubeconfig", "", "absolute path to the kubeconfig file")
  18. }
  19. flag.Parse()
  20. config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)
  21. if err != nil {
  22. panic(err.Error())
  23. }
  24. // create the clientset
  25. clientset, err := kubernetes.NewForConfig(config) //创建clientset
  26. if err != nil {