kubenetes各模块是以一种非常松散的方式结合在一起的,各模块相关的通信都是以etcd为中心进行的,有点类似一个事件分发处理系统。

kubelet是kubernetes系统中,运行在子节点上的进程,主要进行子节点资源的监控上报,container的运行监控等。

举个简单的例子,如果根据etcd中的记录,节点A上应该运行3个container,结果实际只运行了2个容器,kubelet发现这个mismatch之后,会按照具体的配置再启动一个container,以符合etcd中的配置描述。

其中的配置其实就是PodSpec,描述了每一个pod的详情,一个PodSpec就是一个YAML或者JSON文件对象;

kubelet通过以下几个途径获取PodSpec配置列表:

https://k8smeetup.github.io/docs/reference/generated/kubelet/

(1)api server 这个是最常用的

(2)启动时指定的目录,kubelet会定期扫描该目录,如果有新增的PodSpec,就会执行相应的创建操作

(3)HTTP接口,也是定时调用该接口,获取PodSpec的变化情况

(4)HTTPserver方式,kubelet启动时,会额外启动一个http服务,外界可以通过调用该接口,主动提交PodSpec

 

kubelet是通过docker或者rtk进行容器管理的,这里我们先安装docker环境

wget -qO- https://get.docker.com/ | sh

拉取最新的k8s源码

mkdir -p /root/go/src/k8s.io
cd /root/go/src/k8s.io/
git clone https://github.com/kubernetes/kubernetes.git

切换到release分支,build一下kubelet模块

cd go/src/k8s.io/kubernetes/cmd/kubelet/


go build .

#启动kubelet,指定通过某个目录来获取Podspec配置
./kubelet --pod-manifest-path=/root/manifests

放置在/root/manifests下面的Podspec文件,都会被kubelet监控到,并进行启动

 apiVersion: v1
 kind: Pod
 metadata:
   name: nginx
 spec:
   containers:
   - name: nginx
     image: nginx
     ports:
     - containerPort: 80
     volumeMounts:
     - mountPath: /var/log/nginx
       name: nginx-logs
   - name: log-truncator
     image: busybox
     command:
     - /bin/sh
     args: [-c, 'while true; do cat /dev/null > /logdir/access.log; sleep 10; done']
     volumeMounts:
     - mountPath: /logdir
       name: nginx-logs
   volumes:
   - name: nginx-logs
     emptyDir: {}

pod启动之后,可以看到一共有三个容器在运行

root@weiyuanke-VirtualBox:~/manifests# docker ps
CONTAINER ID        IMAGE                                      COMMAND                  CREATED             STATUS              PORTS               NAMES
166ec3383032        busybox                                    "/bin/sh -c 'while t…"   16 minutes ago      Up 16 minutes                           k8s_log-truncator_nginx-weiyuanke-virtualbox_default_daafef244e7c2caef984ce760212a72e_0
e6b0bc9dc220        nginx                                      "nginx -g 'daemon of…"   16 minutes ago      Up 16 minutes                           k8s_nginx_nginx-weiyuanke-virtualbox_default_daafef244e7c2caef984ce760212a72e_0
0834d7517a46        gcr.io/google_containers/pause-amd64:3.0   "/pause"                 16 minutes ago      Up 16 minutes                           k8s_POD_nginx-weiyuanke-virtualbox_default_daafef244e7c2caef984ce760212a72e_0

其中busybox和nginx通过container的网络模式,通过gogole_container共享网络

删掉yaml文件之后,kubelet会同步的删掉相关的容器

 

 

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐