kubernetes版本:v1.11.1/2

文档参考:

http://docs.kubernetes.org.cn/
https://www.kubernetes.org.cn/docs

一、 节点

1. 节点查看

1
2
3
4
5
[root@k8s-t1 ~]# kubect get nodes
NAME STATUS ROLES AGE VERSION
k8s-t1 Ready master 6d v1.11.2
k8s-t2 Ready <none> 6d v1.11.2
k8s-t3 Ready <none> 6d v1.11.2

2. 节点调度

停止调度:仅阻止后续调度任务,已被调度到的pods不受影响

1
2
[root@k8s-t1 ~]# kubect cordon k8s-t2
node/k8s-t2 already cordoned

确认节点信息

1
2
3
4
5
[root@k8s-t1 ~]# kubect get nodes
NAME STATUS ROLES AGE VERSION
k8s-t1 Ready master 6d v1.11.2
k8s-t2 Ready,SchedulingDisabled <none> 6d v1.11.2
k8s-t3 Ready <none> 6d v1.11.2

恢复调度

1
[root@k8s-t1 ~]# kubect uncordon k8s-t2

3. 节点维护

节点维护:清除此节点上所有用户deployment运行的pods,未使用deployment的pods需要手动清理,或者使用–force参数

1
2
3
[root@k8s-t1 ~]# kubect drain k8s-t2 --ignore-daemonsets --delete-local-data
node/k8s-t2 already cordoned
WARNING: Ignoring DaemonSet-managed pods: kube-flannel-ds-fmvbn, kube-proxy-bjwvs; Deleting pods with local storage: kubernetes-dashboard-744894d884-jwfrn, metrics-server-67cd98b87f-wlmbw

参数解析:

  • –ignore-daemonsets 忽略k8s的守护进程副本集pods
  • –delete-local-data pods使用的本地空目录将被一起清理

查看节点信息

1
2
3
4
5
[root@k8s-t1 ~]# kubect get nodes
NAME STATUS ROLES AGE VERSION
k8s-t1 Ready master 6d v1.11.2
k8s-t2 Ready,SchedulingDisabled <none> 6d v1.11.2
k8s-t3 Ready <none> 6d v1.11.2

节点恢复

1
2
[root@k8s-t1 ~]# kubect uncordon k8s-t2
node/k8s-t2 uncordoned

4. 节点移除

1
2
3
4
5
6
[root@k8s-t1 ~]# kubectl delete node k8s-t2
node "k8s-t2" deleted
[root@k8s-t1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-t1 Ready master 6d v1.11.2
k8s-t3 Ready <none> 6d v1.11.2

为了节点能重新加入到k8s集群,必须清理掉节点上原来加入到集群成生成的一部分文件,否则再次加入会失败,文件列表如下:

  • /etc/kubernetes/pki/ca.crt
  • /etc/kubernetes/kubelet.conf
  • /etc/kubernetes/bootstrap-kubelet.conf

然后需要关闭kubelet服务,否则会报端口10250被占用。

kubernetes提供了更便捷的命令kubeadm reset来重置本节点环境,若报错,可以强制执行(-f)。

重新加入请使用原来初始化生成的kubeadm join命令串

二、pod

pod是k8s中最小管理单元,由一个或多个容器组合在一起得共享资源,这此资源包括:

  • 共享存储,如Volumes卷
  • 网络,唯一的集群IP地址
  • 每个容器运行的信息,例如:容器镜像版本

Pod模型是特定应用程序的“逻辑主机”,Pod中的容器共享IP地址和端口。

三、service

kubernetes的service定义了Pod的逻辑分组和一种可以访问它们的策略,这组Pod能被Service访问,使用YAML(优先)或JSON来定义Service,Service所针对的一组Pod通常由LabelSelector实现,可以通过type在ServiceSpec中指定一个需要的类型的 Service,Service的四种type:

  • ClusterIP(默认) - 在集群中内部IP上暴露服务。此类型使Service只能从群集中访问。
  • NodePort - 通过每个 Node 上的 IP 和静态端口(NodePort)暴露服务。NodePort 服务会路由到 ClusterIP 服务,这个 ClusterIP 服务会自动创建。通过请求 - :,可以从集群的外部访问一个 NodePort 服务。
  • LoadBalancer - 使用云提供商的负载均衡器(如果支持),可以向外部暴露服务。外部的负载均衡器可以路由到 NodePort 服务和 ClusterIP 服务。
  • ExternalName - 通过返回 CNAME 和它的值,可以将服务映射到 externalName 字段的内容,没有任何类型代理被创建。这种类型需要v1.7版本或更高版本kube-dnsc才支持。

四、deployment

Deployment负责创建和更新应用。创建Deployment后,Kubernetes master 会将Deployment创建好的应用实例调度到集群中的各个节点。

五、secret

k8s密钥是保存各类组件连接之间认证的服务

六、namespace

Namespace是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的pods, services, replication controllers和deployments等都是属于某一个namespace的(默认是default),而node, persistentVolumes等则不属于任何namespace。Namespace常用来隔离不同的用户,比如Kubernetes自带的服务一般运行在kube-system namespace中。

1. 系统默认命名空间(不可删除)

  • default: 给用户定义的默认命名空间
  • kube-public: k8s系统公共服务的命名空间
  • kube-system: k8s系统服务及组件的命名空间

查看默认命名空间

1
2
3
4
5
[root@k8s-t1 kubernetes]# kubectl get namespace
NAME STATUS AGE
default Active 6d
kube-public Active 6d
kube-system Active 6d

2. 创新命名空间

1
2
[root@k8s-t1 ~]# kubectl create namespace prod
namespace/prod created

然后,你可以将你所有创建的k8s资源放在这个命名空间内,可以做到逻辑集合在一起,方便统一管理的好处

七、lables

Labels其实就一对 key/value ,被关联到对象上,标签的使用我们倾向于能够标示对象的特殊特点,并且对用户而言是有意义的(就是一眼就看出了这个Pod是尼玛数据库)

八、volume

默认情况下容器中的磁盘文件是非持久化的,对于运行在容器中的应用来说面临两个问题,第一:当容器挂掉kubelet将重启启动它时,文件将会丢失;第二:当Pod中同时运行多个容器,容器之间需要共享文件时。Kubernetes的Volume解决了这两个问题。