官方文档:
Kubernetes中文手册
Node是什么?
Node是Kubernetes中的工作节点,最开始被称为minion。一个Node可以是VM或物理机。每个Node(节点)具有运行pod的一些必要服务,并由Master组件进行管理,Node节点上的服务包括Docker、kubelet和kube-proxy。
一个Pod总是在一个(Node)节点上运行,Node是Kubernetes中的工作节点,可以是虚拟机或物理机。每个Node由 Master管理,Node上可以有多个pod,Kubernetes Master会自动处理群集中Node的pod调度,同时Master的自动调度会考虑每个Node上的可用资源。
每个Kubernetes Node上至少运行着:
- Kubelet,管理Kubernetes Master和Node之间的通信; 管理机器上运行的Pods和containers容器。
- container runtime(如Docker,rkt)。
Kubernetes Pod
Pod是Kubernetes中一个抽象化概念,由一个或多个容器组合在一起得共享资源。这些资源包括:
- 共享存储,如 Volumes 卷
- 网络,唯一的集群IP地址
- 每个容器运行的信息,例如:容器镜像版本
Pod模型是特定应用程序的“逻辑主机”,并且包含紧密耦合的不同应用容器。
Pod中的容器共享IP地址和端口。
Pod是Kubernetes中的最小单位,当在Kubernetes上创建Deployment时,该Deployment将会创建具有容器的Pods(而不会直接创建容器),每个Pod将被绑定调度到Node节点上,并一直保持在那里直到被终止(根据配置策略)或删除。在节点出现故障的情况下,群集中的其他可用节点上将会调度之前相同的Pod。
Kubernetes集群搭建
此实验需要联网
实验环境:(安装docker并开启)
server1:172.25.25.1 (k8s-master)
server2:172.25.25.2 (k8s-node1)
server3:172.25.25.3 (k8s-node2)
master节点cpu数至少两个
内存2048M
1.先清理之前的swarm环境
docker swarm leave
docker swarm leave –force
docker container prune
2.安装相应软件
[root@server3 rpm]# ls
cri-tools-1.13.0-0.x86_64.rpm kubelet-1.15.0-0.x86_64.rpm
kubeadm-1.15.0-0.x86_64.rpm kubernetes-cni-0.7.5-0.x86_64.rpm
kubectl-1.15.0-0.x86_64.rpm
[root@server3 rpm]# yum install -y *
[root@server1 ~]# rpm -qa | grep kubeadm
kubeadm-1.15.0-0.x86_64
3.关闭系统的交换分区
swapoff -a
vim /etc/fstab
#/dev/mapper/rhel-swap swap swap defaults 0 0
server1,2,3同上
4.启动 kubelet 还需要做如下修改
[root@server1 ~]# vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
sysctl --system
systemctl start kubelet
systemctl enable kubelet.service
server2,3同上
5.导入需要的镜像(动态调度,所有节点都要加载)
docker load -i coredns.tar
docker load -i etcd.tar
docker load -i kube-apiserver.tar
docker load -i kube-controller-manager.tar
docker load -i kube-proxy.tar
docker load -i kube-scheduler.tar
docker load -i pause.tar
[root@server1 ~]# mkdir -p /etc/systemd/system/docker.service.d
[root@server3 ~]# cd /etc/systemd/system/docker.service.d
[root@server3 docker.service.d]# ls
10-machine.conf #将文件移走
[root@server3 docker.service.d]# mv 10-machine.conf /mnt
[root@server1 ~]# yum install yum-utils device-mapper-persistent-data lvm2 -y
server1,2,3同上
6.master节点初始化
[root@server1 ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=172.25.25.1
选 择flannel作 为Pod网 络 插 件 ,init时需要指定参数 :–pod-network-cidr=10.244.0.0/16
server2,server3:
[root@server2 ~]# kubeadm join 172.25.25.1:6443 --token 88y7fj.2coqcl6319rd4mok \
> --discovery-token-ca-cert-hash sha256:176d3821b2e4f0813f8266f2093a4f66109bce6c1d13dc042cc747d7ddb56356
配置 kubectl:
[root@server1 ~]# useradd kubeadm
[root@server1 ~]# vim /etc/sudoers
kubeadm ALL=(ALL) NOPASSWD:ALL
[root@server1 ~]# su - kubeadm
[kubeadm@server1 ~]$ mkdir -p $HOME/.kube
[kubeadm@server1 ~]$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[kubeadm@server1 ~]$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
[kubeadm@server1 ~]$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
server1 NotReady master 5m36s v1.15.0
server2 NotReady <none> 4m1s v1.15.0
server3 NotReady <none> 9s v1.15.0
NotReady!
安装 pod 网络:
[root@server1 ~]# docker load -i flannel.tar #server1加载镜像,server2,3加载镜像
[root@server1 ~]# cp kube-flannel.yml /home/kubeadm/
[kubeadm@server1 kubernetes]$ cd -
/home/kubeadm
[kubeadm@server1 ~]$ ls
kube-flannel.yml
[kubeadm@server1 ~]$ kubectl apply -f kube-flannel.yml
配置 kubectl 命令补齐功能:
[kubeadm@server1 ~]$ echo "source <(kubectl completion bash)" >> .bash
添加的节点需要设置网关:
[root@server1 ~]# route -n
Master 查看状态:
[kubeadm@server1 ~]$ kubectl get nodes
[kubeadm@server1 ~]$ kubectl get pods –all-namespaces