Docker—k8s集群搭建

  • Post author:
  • Post category:其他


官方文档:

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

在这里插入图片描述



版权声明:本文为qq_37382077原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。