Kubernetes介绍
Kubernetes是Google开源的容器集群管理系统,是基于Docker构建一个容器的调度服务,提供资源调度、均衡容灾、服务注册、动态扩缩容等功能套件。Kubernetes提供应用部署、维护、扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用,其主要功能如下:1)使用Docker对应用程序包装(package)、实例化(instantiate)、运行(run)。2)将多台Docker主机抽象为一个资源,以集群的方式运行、管理跨机器的容器,包括任务调度、资源管理、弹性伸缩、滚动升级等功能。3)使用编排系统(YAMLFile)快速构建容器集群,提供负载均衡,解决容器直接关联及通信问题4)解决Docker跨机器容器之间的通讯问题。5)自动管理和修复容器,简单说,比如创建一个集群,里面有十个容器,如果某个容器异常关闭,那么,会尝试重启或重新分配容器,始终保证会有十个容器在运行,反而杀死多余的。Kubernetes的自我修复机制使得容器集群总是运行在用户期望的状态当前Kubernetes支持GCE、vShpere、CoreOS、OpenShift。
Kubernetes和Mesos的区别
1)Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核;Kubernetes是Google开源的容器集群管理系统,实现基于Docker构建容器,利用Kubernetes能很方面管理多台Docker主机中的容器。2)Mesos负责管理集群管资源(动态运行时,某机器有额外的资源,通知master来分配);Kubernetes抽象出新的容器组合模型并且对其编排管理(把容器自由组合提供服务这事儿搞定了,从而微服务,serverless等才真正的优雅地在开发和运维之间不吵架地被实现),而且kubernetes把以前运维的很多很难搞的东西都变得容易了。比如OpenStack,Kubernetes是把OpenStack里面的VM换成了容器,但是实现地更漂亮,更精简,更抽象和本质化,用起来也更容易。3)Mesos相比Kubernetes发展的时间更久,总体情况更成熟,在生产环境有更多的使用经验,国外使用Mesos的公司有Twitter,Apple,Airbnb,Uber等,国内也有大批知名公司在使用Mesos,比如:小米、当当、豆瓣、去哪儿、携程、唯品会、知乎、新浪微博、爱奇艺、七牛、唯品会、bilibili、中国联通、中国移动、中国电信、华为、数人云等等。中大型公司会更倾向于使用Mesos,因为本身这些公司有一定的开发能力,Mesos提供了良好的API而且有非常多成熟的Framework跑在Mesos上,Mesos+Marathon+Zookeeper正常情况可以满足绝大部分需求,只需要写JSON或者DSL定义好service/application就好,只有一些特殊情况才确实需要写自己的Framework。而kubernetes(k8s)现在也正在慢慢成熟起来,它在生产环境显然还需要更多时间来验证。京东目前已经在kubernetes上跑15W+容器了。Mesos现在越来越适应并且被添加上了很多Kubernete的概念同时支持了很多Kubernetes的API。因此如果你需要它们的话,它将是对你的Kubernetes应用去获得更多能力的一个便捷方式(比如高可用的主干、更加高级的调度命令、去管控很大数目结点的能力),同时能够很好的适用于产品级工作环境中(毕竟Kubernetes任然还是一个初始版本)。4)如果你是一个集群世界的新手,Kubernetes是一个很棒的起点。它是最快的、最简单的、最轻量级的方法去摆脱束缚,同时开启面向集群开发的实践。它提供了一个高水平的可移植方案,因为它是被一些不同的贡献者所支持的(例如微软、IBM、RedHat、CoreOs、MesoSphere、VMWare等等)。如果你已经有已经存在的工作任务(Hadoop、Spark、Kafka等等),Mesos给你提供了一个可以让你将不同工作任务相互交错的框架,然后混合进一个包含Kubernetes应用的新的东西。如果你还没有用Kubernetes系列框架完成项目的能力,Mesos给了你一个减压阀。
Kubernetes结构图
kubernetes角色组成
1)Pod在Kubernetes系统中,调度的最小颗粒不是单纯的容器,而是抽象成一个Pod,Pod是一个可以被创建、销毁、调度、管理的最小的部署单元。比如一个或一组容器。Pod是kubernetes的最小操作单元,一个Pod可以由一个或多个容器组成;同一个Pod只能运行在同一个主机上,共享相同的volumes、network、namespace;2)ReplicationController(RC)RC用来管理Pod,一个RC可以由一个或多个Pod组成,在RC被创建后,系统会根据定义好的副本数来创建Pod数量。在运行过程中,如果Pod数量小于定义的,就会重启停止的或重新分配Pod,反之则杀死多余的。当然,也可以动态伸缩运行的Pods规模或熟悉。RC通过label关联对应的Pods,在滚动升级中,RC采用一个一个替换要更新的整个Pods中的Pod。ReplicationController是Kubernetes系统中最有用的功能,实现复制多个Pod副本,往往一个应用需要多个Pod来支撑,并且可以保证其复制的副本数,即使副本所调度分配的宿主机出现异常,通过ReplicationController可以保证在其它主宿机启用同等数量的Pod。ReplicationController可以通过repcon模板来创建多个Pod副本,同样也可以直接复制已存在Pod,需要通过Labelselector来关联。3)ServiceService定义了一个Pod逻辑集合的抽象资源,Pod集合中的容器提供相同的功能。集合根据定义的Label和selector完成,当创建一个Service后,会分配一个ClusterIP,这个IP与定义的端口提供这个集合一个统一的访问接口,并且实现负载均衡。Services是Kubernetes最外围的单元,通过虚拟一个访问IP及服务端口,可以访问我们定义好的Pod资源,目前的版本是通过iptables的nat转发来实现,转发的目标端口为Kube_proxy生成的随机端口,目前只提供GOOGLE云上的访问调度,如GCE。4)LabelLabel是用于区分Pod、Service、RC的key/value键值对;仅使用在Pod、Service、ReplicationController之间的关系识别,但对这些单元本身进行操作时得使用name标签。Pod、Service、RC可以有多个label,但是每个label的key只能对应一个;主要是将Service的请求通过lable转发给后端提供服务的Pod集合;说说个人一点看法,目前Kubernetes保持一周一小版本、一个月一大版本的节奏,迭代速度极快,同时也带来了不同版本操作方法的差异,另外官网文档更新速度相对滞后及欠缺,给初学者带来一定挑战。在上游接入层官方侧重点还放在GCE(GoogleComputeEngine)的对接优化,针对个人私有云还未推出一套可行的接入解决方案。在v0.5版本中才引用service代理转发的机制,且是通过iptables来实现,在高并发下性能令人担忧。但作者依然看好Kubernetes未来的发展,至少目前还未看到另外一个成体系、具备良好生态圈的平台,相信在V1.0时就会具备生产环境的服务支撑能力。
kubernetes组件组成
1)kubectl客户端命令行工具,将接受的命令格式化后发送给kube-apiserver,作为整个系统的操作入口。2)kube-apiserver作为整个系统的控制入口,以RESTAPI服务提供接口。3)kube-controller-manager用来执行整个系统中的后台任务,包括节点状态状况、Pod个数、Pods和Service的关联等。4)kube-scheduler负责节点资源管理,接受来自kube-apiserver创建Pods任务,并分配到某个节点。5)etcd负责节点间的服务发现和配置共享。6)kube-proxy运行在每个计算节点上,负责Pod网络代理。定时从etcd获取到service信息来做相应的策略。7)kubelet运行在每个计算节点上,作为agent,接受分配该节点的Pods任务及管理容器,周期性获取容器状态,反馈给kube-apiserver。8)DNS一个可选的DNS服务,用于为每个Service对象创建DNS记录,这样所有的Pod就可以通过DNS访问服务了。
Kubelet
根据上图可知Kubelet是Kubernetes集群中每个Minion和MasterAPIServer的连接点,Kubelet运行在每个Minion上,是MasterAPIServer和Minion之间的桥梁,接收MasterAPIServer分配给它的commands和work,与持久性键值存储etcd、file、server和http进行交互,读取配置信息。Kubelet的主要工作是管理Pod和容器的生命周期,其包括DockerClient、RootDirectory、PodWorkers、EtcdClient、CadvisorClient以及HealthChecker组件,具体工作如下:1)通过Worker给Pod异步运行特定的Action。2)设置容器的环境变量。3)给容器绑定Volume。4)给容器绑定Port。5)根据指定的Pod运行一个单一容器。6)杀死容器。7)给指定的Pod创建network容器。8)删除Pod的所有容器。9)同步Pod的状态。10)从Cadvisor获取containerinfo、podinfo、rootinfo、machineinfo。11)检测Pod的容器健康状态信息。12)在容器中运行命令
kubernetes基本部署步骤
1)minion节点安装docker2)minion节点配置跨主机容器通信3)master节点部署etcd、kube-apiserver、kube-controller-manager和kube-scheduler组件4)minion节点部署kubelet、kube-proxy组件温馨提示:如果minion主机没有安装docker,启动kubelet时会报如下错误:Couldnotloadkubeconfigfile/var/lib/kubelet/kubeconfig:stat/var/lib/kubelet/kubeconfig:nosuchfileordirectory.Tryingauthpathinstead.Couldnotloadkubernetesauthpath/var/lib/kubelet/kubernetes_auth:stat/var/lib/kubelet/kubernetes_auth:nosuchfileordirectory.Continuingwithdefaults.Nocloudproviderspecified.
kubernetes集群环境部署过程记录
主机名IP节点及功能系统版本K8S-master10.10.172.202Master、etcd、registryCentOS7.2K8S-node-110.10.172.203Node1CentOS7.2K8S-node-210.10.172.204Node2CentOS7.2
1)设置三台机器的主机名
Master上执行:[root@localhost~]#hostnamectl--staticset-hostnamek8s-masterNode1上执行:[root@localhost~]#hostnamectl--staticset-hostnamek8s-node-1 Node2上执行:[root@localhost~]#hostnamectl--staticset-hostnamek8s-node-2在三台机器上都要设置hosts,均执行如下命令:[root@k8s-master~]#vim/etc/hosts10.10.172.202k8s-master10.10.172.202etcd10.10.172.202registry10.10.172.203k8s-node-110.10.172.204k8s-node-2
2)关闭三台机器上的防火墙
[root@k8s-master~]#systemctldisablefirewalld.service[root@k8s-master~]#systemctlstopfirewalld.service
3)现在开始部署Master
1)先安装docker环境[root@k8s-master~]#yuminstall-ydocker配置Docker配置文件,使其允许从registry中拉取镜像[root@k8s-master~]#vim/etc/sysconfig/docker#添加下面一行内容......OPTIONS='--insecure-registryregistry:5000'[root@k8s-master~]#systemctlstartdocker2)安装etcdk8s运行依赖etcd,需要先部署etcd,下面采用yum方式安装:[root@k8s-master~]#yuminstalletcd-yyum安装的etcd默认配置文件在/etc/etcd/etcd.conf,编辑配置文件:[root@k8s-master~]#cp/etc/etcd/etcd.conf/etc/etcd/etcd.conf.bak[root@k8s-master~]#cat/etc/etcd/etcd.conf#[member]ETCD_NAME=master#节点名称ETCD_DATA_DIR="/var/lib/etcd/default.etcd"#数据存放位置#ETCD_WAL_DIR=""#ETCD_SNAPSHOT_COUNT="10000"#ETCD_HEARTBEAT_INTERVAL="100"#ETCD_ELECTION_TIMEOUT="1000"#ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"#监听客户端地址#ETCD_MAX_SNAPSHOTS="5"#ETCD_MAX_WALS="5"#ETCD_CORS=""##[cluster]#ETCD_INITIAL_ADVERTISE_PEER_URLS="http://localhost:2380"#ifyouusedifferentETCD_NAME(e.g.test),setETCD_INITIAL_CLUSTERvalueforthisname,i.e."test=http://..."#ETCD_INITIAL_CLUSTER="default=http://localhost:2380"#ETCD_INITIAL_CLUSTER_STATE="new"#ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"ETCD_ADVERTISE_CLIENT_URLS="http://etcd:2379,http://etcd:4001"#通知客户端地址#ETCD_DISCOVERY=""#ETCD_DISCOVERY_SRV=""#ETCD_DISCOVERY_FALLBACK="proxy"#ETCD_DISCOVERY_PROXY=""启动etcd并验证状态[root@k8s-master~]#systemctlstartetcd[root@k8s-master~]#ps-ef|grepetcdetcd281451114:38?00:00:00/usr/bin/etcd--name=master--data-dir=/var/lib/etcd/default.etcd--listen-client-urls=http://0.0.0.0:2379,http://0.0.0.0:4001root2818524819014:38pts/100:00:00grep--color=autoetcd[root@k8s-master~]#lsof-i:2379COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAMEetcd28145etcd6uIPv612838220t0TCP*:2379(LISTEN)etcd28145etcd18uIPv612841330t0TCPlocalhost:53203->localhost:2379(ESTABLISHED)........[root@k8s-master~]#etcdctlsettestdir/testkey000[root@k8s-master~]#etcdctlgettestdir/testkey00[root@k8s-master~]#etcdctl-Chttp://etcd:4001cluster-healthmember8e9e05c52164694dishealthy:gothealthyresultfromhttp://etcd:2379clusterishealthy[root@k8s-master~]#etcdctl-Chttp://etcd:2379cluster-healthmember8e9e05c52164694dishealthy:gothealthyresultfromhttp://etcd:2379clusterishealthy3)安装kubernets[root@k8s-master~]#yuminstallkubernetes配置并启动kubernetes在kubernetesmaster上需要运行以下组件:KubernetsAPIServer、KubernetsControllerManager、KubernetsScheduler[root@k8s-master~]#cp/etc/kubernetes/apiserver/etc/kubernetes/apiserver.bak[root@k8s-master~]#vim/etc/kubernetes/apiserver####kubernetessystemconfig##Thefollowingvaluesareusedtoconfigurethekube-apiserver##Theaddressonthelocalservertolistento.KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"#Theportonthelocalservertolistenon.KUBE_API_PORT="--port=8080"#Portminionslistenon#KUBELET_PORT="--kubelet-port=10250"#CommaseparatedlistofnodesintheetcdclusterKUBE_ETCD_SERVERS="--etcd-servers=http://etcd:2379"#AddressrangetouseforservicesKUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"#defaultadmissioncontrolpolicies#KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"#Addyourown!KUBE_API_ARGS=""[root@k8s-master~]#cp/etc/kubernetes/config/etc/kubernetes/config.bak[root@k8s-master~]#vim/etc/kubernetes/config####kubernetessystemconfig##Thefollowingvaluesareusedtoconfigurevariousaspectsofall#kubernetesservices,including##kube-apiserver.service#kube-controller-manager.service#kube-scheduler.service#kubelet.service#kube-proxy.service#loggingtostderrmeanswegetitinthesystemdjournalKUBE_LOGTOSTDERR="--logtostderr=true"#journalmessagelevel,0isdebugKUBE_LOG_LEVEL="--v=0"#ShouldthisclusterbeallowedtorunprivilegeddockercontainersKUBE_ALLOW_PRIV="--allow-privileged=false"#Howthecontroller-manager,scheduler,andproxyfindtheapiserverKUBE_MASTER="--master=http://k8s-master:8080"启动服务并设置开机自启动[root@k8s-master~]#systemctlenablekube-apiserver.service[root@k8s-master~]#systemctlstartkube-apiserver.service[root@k8s-master~]#systemctlenablekube-controller-manager.service[root@k8s-master~]#systemctlstartkube-controller-manager.service[root@k8s-master~]#systemctlenablekube-scheduler.service[root@k8s-master~]#systemctlstartkube-scheduler.service
4)接着部署Node(在两台node节点机器上都要操作)
1)安装docker[root@k8s-node-1~]#yuminstall-ydocker配置Docker配置文件,使其允许从registry中拉取镜像[root@k8s-node-1~]#vim/etc/sysconfig/docker#添加下面一行内容......OPTIONS='--insecure-registryregistry:5000'[root@k8s-node-1~]#systemctlstartdocker2)安装kubernets[root@k8s-node-1~]#yuminstallkubernetes配置并启动kubernetes在kubernetesmaster上需要运行以下组件:Kubelet、KubernetsProxy[root@k8s-node-1~]#cp/etc/kubernetes/config/etc/kubernetes/config.bak[root@k8s-node-1~]#vim/etc/kubernetes/config####kubernetessystemconfig##Thefollowingvaluesareusedtoconfigurevariousaspectsofall#kubernetesservices,including##kube-apiserver.service#kube-controller-manager.service#kube-scheduler.service#kubelet.service#kube-proxy.service#loggingtostderrmeanswegetitinthesystemdjournalKUBE_LOGTOSTDERR="--logtostderr=true"#journalmessagelevel,0isdebugKUBE_LOG_LEVEL="--v=0"#ShouldthisclusterbeallowedtorunprivilegeddockercontainersKUBE_ALLOW_PRIV="--allow-privileged=false"#Howthecontroller-manager,scheduler,andproxyfindtheapiserverKUBE_MASTER="--master=http://k8s-master:8080"[root@k8s-node-1~]#cp/etc/kubernetes/kubelet/etc/kubernetes/kubelet.bak[root@k8s-node-1~]#vim/etc/kubernetes/kubelet####kuberneteskubelet(minion)config#Theaddressfortheinfoservertoserveon(setto0.0.0.0or""forallinterfaces)KUBELET_ADDRESS="--address=0.0.0.0"#Theportfortheinfoservertoserveon#KUBELET_PORT="--port=10250"#YoumayleavethisblanktousetheactualhostnameKUBELET_HOSTNAME="--hostname-override=k8s-node-1"#特别注意这个,在另一个node2节点上,要改为k8s-node-2#locationoftheapi-serverKUBELET_API_SERVER="--api-servers=http://k8s-master:8080"#podinfrastructurecontainerKUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"#Addyourown!KUBELET_ARGS=""启动服务并设置开机自启动[root@k8s-node-1~]#systemctlenablekubelet.service[root@k8s-node-1~]#systemctlstartkubelet.service[root@k8s-node-1~]#systemctlenablekube-proxy.service[root@k8s-node-1~]#systemctlstartkube-proxy.service
查看状态
[root@k8s-master~]#kubectl-shttp://k8s-master:8080getnodeNAMESTATUSAGEk8s-node-1Ready29sk8s-node-2Ready28s[root@k8s-master~]#kubectlgetnodesNAMESTATUSAGEk8s-node-1Ready44sk8s-node-2Ready43s
kubernetes常用命令
查看node主机[root@k8s-master~]#kubectlgetnode//有的环境是用monion,那么查看命令就是"kubectlgetminions"查看pods清单[root@k8s-master~]#kubectlgetpods查看service清单[root@k8s-master~]#kubectlgetservices//或者使用命令"kubectlgetservices-ojson"查看replicationControllers清单[root@k8s-master~]#kubectlgetreplicationControllers删除所有pods(同理将下面命令中的pods换成services或replicationControllers,就是删除所有的services或replicationContronllers)[root@k8s-master~]#foriin`kubectlgetpod|tail-n+2|awk'{print$1}'`;dokubectldeletepod$i;done--------------------------------------------------------------------------除了上面那种查看方式,还可以通过ServerapiforREST方式(这个及时性更高)查看kubernetes版本[root@k8s-master~]#curl-s-Lhttp://10.10.172.205:8080/api/v1beta1/version|python-mjson.tool查看pods清单[root@k8s-master~]#curl-s-Lhttp://10.10.172.205:8080/api/v1beta1/pods|python-mjson.tool查看replicationControllers清单[root@k8s-master~]#curl-s-Lhttp://10.10.172.205:8080/api/v1beta1/replicationControllers|python-mjson.tool查查看node主机(或者是minion主机,将下面命令中的node改成minion)[root@k8s-master~]#curl-s-Lhttp://10.10.172.205:8080/api/v1beta1/node|python-mjson.tool查看service清单[root@k8s-master~]#curl-s-Lhttp://10.10.172.205:8080/api/v1beta1/services|python-mjson.tool温馨提示:在新版Kubernetes中,所有的操作命令都整合至kubectl,包括kubecfg、kubectl.sh、kubecfg.sh等
5)创建覆盖网络——Flannel
1)安装Flannel(在master、node上均执行如下命令,进行安装)[root@k8s-master~]#yuminstallflannel2)配置Flannel(在master、node上均编辑/etc/sysconfig/flanneld)[root@k8s-master~]#cp/etc/sysconfig/flanneld/etc/sysconfig/flanneld.bak[root@k8s-master~]#vim/etc/sysconfig/flanneld#Flanneldconfigurationoptions#etcdurllocation.PointthistotheserverwhereetcdrunsFLANNEL_ETCD_ENDPOINTS="http://etcd:2379"#etcdconfigkey.Thisistheconfigurationkeythatflannelqueries#ForaddressrangeassignmentFLANNEL_ETCD_PREFIX="/atomic.io/network"#Anyadditionaloptionsthatyouwanttopass#FLANNEL_OPTIONS=""3)配置etcd中关于flannel的key(这个只在master上操作)Flannel使用Etcd进行配置,来保证多个Flannel实例之间的配置一致性,所以需要在etcd上进行如下配置:('/atomic.io/network/config'这个key与上文/etc/sysconfig/flannel中的配置项FLANNEL_ETCD_PREFIX是相对应的,错误的话启动就会出错)[root@k8s-master~]#etcdctlmk/atomic.io/network/config'{"Network":"10.10.0.0/16"}'{"Network":"10.10.0.0/16"}4)启动Flannel启动Flannel之后,需要依次重启docker、kubernete。在master执行:[root@k8s-master~]#systemctlenableflanneld.service[root@k8s-master~]#systemctlstartflanneld.service[root@k8s-master~]#servicedockerrestart[root@k8s-master~]#systemctlrestartkube-apiserver.service[root@k8s-master~]#systemctlrestartkube-controller-manager.service[root@k8s-master~]#systemctlrestartkube-scheduler.service在node上执行:[root@k8s-node-1~]#systemctlenableflanneld.service[root@k8s-node-1~]#systemctlstartflanneld.service[root@k8s-node-1~]#servicedockerrestart[root@k8s-node-1~]#systemctlrestartkubelet.service[root@k8s-node-1~]#systemctlrestartkube-proxy.service然后通过ifconfig命令查看maste和node节点,发现docker0网桥网络的ip已经是上面指定的10.10.0.0网段了。并且在master和node节点上创建的容器间都是可以相互通信的,能相互ping通!在master上执行:[root@k8s-master~]#ifconfigdocker0:flags=4099<UP,BROADCAST,MULTICAST>mtu1500inet10.10.34.1netmask255.255.255.0broadcast0.0.0.0ether02:42:e1:c2:b5:88txqueuelen0(Ethernet)RXpackets0bytes0(0.0B)RXerrors0dropped0overruns0frame0TXpackets0bytes0(0.0B)TXerrors0dropped0overruns0carrier0collisions0eth0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet10.10.172.202netmask255.255.255.0broadcast10.10.172.255inet6fe80::250:56ff:fe86:6833prefixlen64scopeid0x20<link>ether00:50:56:86:68:33txqueuelen1000(Ethernet)RXpackets87982bytes126277968(120.4MiB)RXerrors0dropped40overruns0frame0TXpackets47274bytes6240061(5.9MiB)TXerrors0dropped0overruns0carrier0collisions0flannel0:flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>mtu1472inet10.10.34.0netmask255.255.0.0destination10.10.34.0unspec00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00txqueuelen500(UNSPEC)RXpackets0bytes0(0.0B)RXerrors0dropped0overruns0frame0TXpackets0bytes0(0.0B)TXerrors0dropped0overruns0carrier0collisions0lo:flags=73<UP,LOOPBACK,RUNNING>mtu65536inet127.0.0.1netmask255.0.0.0inet6::1prefixlen128scopeid0x10<host>looptxqueuelen0(LocalLoopback)RXpackets91755bytes38359378(36.5MiB)RXerrors0dropped0overruns0frame0TXpackets91755bytes38359378(36.5MiB)TXerrors0dropped0overruns0carrier0collisions0[root@k8s-master~]#在node上执行[root@k8s-node-1~]#ifconfigdocker0:flags=4099<UP,BROADCAST,MULTICAST>mtu1500inet10.10.66.1netmask255.255.255.0broadcast0.0.0.0ether02:42:2c:1d:19:14txqueuelen0(Ethernet)RXpackets0bytes0(0.0B)RXerrors0dropped0overruns0frame0TXpackets0bytes0(0.0B)TXerrors0dropped0overruns0carrier0collisions0eth0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet10.10.172.203netmask255.255.255.0broadcast10.10.172.255inet6fe80::250:56ff:fe86:3ed8prefixlen64scopeid0x20<link>ether00:50:56:86:3e:d8txqueuelen1000(Ethernet)RXpackets69554bytes116340717(110.9MiB)RXerrors0dropped34overruns0frame0TXpackets35925bytes2949594(2.8MiB)TXerrors0dropped0overruns0carrier0collisions0flannel0:flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>mtu1472inet10.10.66.0netmask255.255.0.0destination10.10.66.0unspec00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00txqueuelen500(UNSPEC)RXpackets0bytes0(0.0B)RXerrors0dropped0overruns0frame0TXpackets0bytes0(0.0B)TXerrors0dropped0overruns0carrier0collisions0lo:flags=73<UP,LOOPBACK,RUNNING>mtu65536inet127.0.0.1netmask255.0.0.0inet6::1prefixlen128scopeid0x10<host>looptxqueuelen0(LocalLoopback)RXpackets24bytes1856(1.8KiB)RXerrors0dropped0overruns0frame0TXpackets24bytes1856(1.8KiB)TXerrors0dropped0overruns0carrier0collisions0[root@k8s-node-1~]#[root@k8s-node-2~]#ifconfigdocker0:flags=4099<UP,BROADCAST,MULTICAST>mtu1500inet10.10.59.1netmask255.255.255.0broadcast0.0.0.0ether02:42:08:8b:65:48txqueuelen0(Ethernet)RXpackets0bytes0(0.0B)RXerrors0dropped0overruns0frame0TXpackets0bytes0(0.0B)TXerrors0dropped0overruns0carrier