一,kubernetes架构:

简易架构:简单来说:k8s分为两个角色,一个为master角色,一个为node角色。

master节点包括:scheduler(调度器),apiserver,controller-manager(控制器);

master节点负责集群管理。用来接收用户的控制命令并将命令转化为具体的任务分散到每个node计算节点上。

node(计算)节点 接收master分的任务,根据master指令运行任务。

Node节点有kubelet,kube-proxy,docker-Engine

Kubelet,相当于master的一个agent;

Kube-proxy,管理任务的网络;

Docker-Engine:k8s本身不具备容器引擎,不能直接跑容器。需要第三方的容器引擎(主流docker)。

Etcd:是k8s提供的一个高可用的键值数据库,用于保存集群所有的网络配置和资源对象的状态信息,也就是保存了整个集群的状态。

简易架构图:

详细架构图:

kubernetes基本概念:

Pod:

      最小部署单元

      一组容器的集合

      一个pod中的容器共享网络命名空间

      pod是短暂的

Controllers(控制器):

      ReplicaSet:确保预期的Pod副本数量

      Deployment:无状态应用部署

      StatefulSet:有状态部署应用

      DaemonSet:确保所有Node运行同一个Pod

      Job:一次性任务

      Cronjob:定时任务

      Label:标签,附加在某个资源上,用于关联对象、查询和筛选

      Namespaces:命名空间,将对象逻辑上隔离。

Service

      防止Pod失联

      定义一组Pod的访问策略

kubernetes集群部署基础环境配置:

1,)安装要求:

(1.)3台机器(1台master,2台node),操作系统CentOS7.4-86_x64。

(2.)硬件配置:2GB或更多RAM,2个或更多CPU,硬盘30GB或更多。

(3.)集群内所有机器内网互通

(4.)机器可以访问外网,需要拉取镜像(配置2块网卡)

(5.)禁止swap分区

 2,)环境准备:

       (1.)安装centos7 系统,并配置网络,安装对应命令包(vim,ntpdate等),并注意服务器之间的时间同步和时间准确度。

                  ntpdate time.windows.com   

       (2.)关闭防火墙:

                  systemctl stop firewalld

                  systemctl disable firewalld

       (3.)关闭selinux:

                  sed -i ‘s/enforcing/disabled/’ /etc/selinux/config

                  setenforce 0

        (4.)关闭swap:

                  swapoff -a   临时关闭

                  vim /etc/fstab   永久关闭

        (5.)添加主机名与ip对应关系

                  # cat /etc/hosts

                  192.168.26.130   master

192.168.26.131   kubernetesNode1

192.168.26.132   kubernetesNode2

            (6.)将桥接的ipv4流量传递到iptables的链:

                  cat > /etc/sysctl.d/k8s.conf << EOF

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

sysctl --system

            (7.)所有节点安装docker/kubeadm/kubelet/kubectl

                  1,安装docker:

【注:centos7.4系统在安装docker时有报错缺少container-selinux包,需先安装container-selinux解决】

                   wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

                   yum install epel-release -y

                   yum install container-selinux -y

                   wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

yum -y install docker-ce-18.06.1.ce-3.el7

systemctl enable docker && systemctl start docker

docker –version

     【注意:后面在初始化k8s master节点时会有警告:需要将docker的cgroupdriver参数改为systemd(docker info可以查看docker系统信息)】

                   配置docker启动参数

                  cat  > /etc/docker/daemon.json  <<EOF

{

                   "registry-mirrors": ["https://yywkvob3.mirror.aliyuncs.com"],

                   "exec-opts": ["native.cgroupdriver=systemd"]

}

EOF

#重启docker

systemctl  daemon-reload

systemctl  restart docker

2,安装kubeadm,kubelet,kubectl

配置kubernetes镜像

cat > /etc/yum.repos.d/kubernetes.repo << EOF

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64

enabled=1

gpgcheck=0

repo_gpgcheck=0

gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

安装kubeadm,kubelet,kubectl

yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0

//由于版本更新频繁,此处指定版本号部署

systemctl enable kubelet

                  3,部署kubernetes Master

                   在192.168.26.130(master机器)上执行。初始化master节点

                  kubeadm init \

                --apiserver-advertise-address=192.168.26.130 \

                --image-repository registry.aliyuncs.com/google_containers \

                --kubernetes-version v1.15.0 \

                --service-cidr=10.1.0.0/16 \

                 --pod-network-cidr=10.244.0.0/16

                  参数解析:

--apiserver-advertise-address     //api通告地址(apiserver地址)

--image-repository     //镜像仓库(默认拉取镜像地址k8s.gcr.io是国外地址,考虑到网络问题,此处配置为阿里云地址)

--kubernetes-version    //指定k8s版本

--service-cidr           //kube-proxy的ip

--pod-network-cidr      //每个容器的ip

初始化成功后会有此显示:

      初始化启动流程:

1.)执行前先检查配置,之后拉取kubernetes集群所需要的镜像

2.)启动kubelet,将带有标志的kubelet环境文件写入文件“/var/lib/kubelet/kubeadm flags.env”,将kubelet配置写入文件“/var/lib/kubelet/config.yaml”,之后激活kubelet服务。

3.)之后生成证书和密钥,先生成apiserver的证书和密钥

4.)生成etcd的证书

5.)生成代理proxy的证书

6.)生成kubeconfig文件,此文件用于生成其他组件

7.)生成master的3个组件,通过静态方式为“kube apiserver”创建静态Pod清单,为“kube控制器管理器(kube-controller-manager)”创建静态吊舱清单,为“kube调度器(kube-scheduler)”创建静态Pod清单

8.)生成token

9.)部署两个组件(一个为DNS,为k8s内部的DNS,此版本1.15默认为CoreDNS;另一个为负责网络的proxy)。

10.)会提示一下操作,并根据提示完成操作

            4,初始化完成后完成提示操作

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

      5,安装Pod网络插件(CNI)

【备注:原地址因网络原因无法拉取下载,从网络中找的另外的地址拉取的】

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

        6,执行# kubectl get pods -n kube-system可以查看pod是否已启动起来

            7,在node节点执行,将node节点加入到集群。

kubeadm join 192.168.26.130:6443 --token 4aemma.gdxg6ballhqazd2f \

--discovery-token-ca-cert-hash sha256:b3b3c2a1900a92d9307d21dc56d7c11d721cf926f6f1515df48b84072fe33367

【注:此命令在kubernetes集群master初始化成功后会有此命令】

出现此标识表示当前node节点初始化成功。提示可以使用kubectl get nodes命令查询。

在master节点使用kubectl get nodes此命令可以看到node节点已准备好

部署一个nginx应用,测试集群是否正常

1.)kubectl create deployment nginx --image=nginx

//创建deployment控制器,镜像使用nginx

2.)kubectl expose deployment nginx --port=80 --type=NodePort

//将应用暴露,使外部用户可以访问到此应用。(使用node节点ip+端口即可访问到该应用)。

3.)kubectl get pod,svc

//查看nginx状态。

访问node节点(根据查询看暴露端口为31288):

即访问node1节点:192.168.26.131:31288

访问node2节点:192.168.26.132:31288

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐