深入剖析 Kubernetes(一)- 安装

安装之后可以使用 kubectl get nodes 获取所有节点的状态

如果有节点的状态是 NotReady 的可以使用 kubectl describe 来查看这个节点(Node)的对象的详细信息、状态和事件(Event)。

kube-system 是 Kubernets 项目预留的系统的 Pod 的工作空间(Namespace,注意它并不是 Linux Namespace,它只是 Kubernetes 划分不同工作空间的单位)

Kubernetes 调整对 Pod 的执行策略

Kubernetes 默认是不允许用户 Pod 的。而 Kubernetes 做到这一点,依靠的是 Kubernetes 的 Taint/Toleration 机制。

删除 taint ,我们在节点名称的后面加上一个短横线“-”,这个格式意味着移除所有已“node-role.kubernetes.io/master” 为键的 Taint

EG:kubectl taint nodes --all node-role.kubernetes.io/master---all node-role.kubernetes.io/master-

原理:当某个节点被加上一个 Taint,即被“打上了污点”的命令是:kubectl taint nodes node

foo=bar:NoSchedule,其中bar的 Noschedule,意味这这个 Taint 只会在调度新 Pod 时产生作用,而不会影响以及在 node1上运行的Pod,哪怕它们没有 Toleration。

践:master 默认被打上了 taint 导致,存储插件 operator.yaml 无法创建,需要将 taint 去掉

声明 Tolertation 如下:

apiVersion: v1

kind: Pod

...

  tolerations:

  - key: "foo"

    operator: "Equal"

    value: "bar"

    effect: "NoSchedule"

配置文件的含义这个 Pod 能“容忍”所有键值对为 foo=bar 的 Taint(operation:“Equal”,“等于”操作)。

容器最典型的特征之一:无状态

所谓的无状态就是在容器停止之后所有的存储在内存中的数据或者在容器目录下的文件都会被销毁。

所以为了解决无状态的这个问题容器,Kubernetes 需要部署容器存储插件。用于容器的持久化存储:存储插件会在容器里挂载一个基于网络或者其他基于的远程数据卷,使得在容器里创建的文件,实际上是保持在远程存储服务器上, 或者以分布式的方式保存在多个节点上,而与当前宿主机没有任何绑定关系。无论在哪个宿主机上启动新的容器,都可以请求挂载制定的持久化存储卷,从而访问到数据卷里保存的内容。这就是持久化的含义。

持久化存储插件选型:Ceph、GlusterFS、NFS、Rook

最新的部署ceph cluster需要多一条部署命令才可以部署成功:

1. kubectl apply -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/common.yaml

2. kubectl apply -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/operator.yaml

3. kubectl apply -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/cluster.yaml

你可能感兴趣的:(深入剖析 Kubernetes(一)- 安装)