centos 7 k8s搭建指南

/ 0评 / 0

K8S架构

Kubernetes主要由以下几个核心组件组成:
• etcd保存了整个集群的状态;
• apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
• controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
• scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
• kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
• Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
• kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;

kubernetes集群环境部署过程

主机名 IP 节点及功能 系统版本
K8s-master 10.1.1.2 Master/etcd Centos7.3
K8s-node1 10.1.1.3 Node1 Centos7.3
K8s-node1 10.1.1.4 Node2 Centos7.3

 

1.设置主机名

Master上执行:

[root@localhost ~]# hostnamectl --static set-hostname  k8s-master

Node1上执行:

[root@localhost ~]# hostnamectl --static set-hostname  k8s-node-1

Node2上执行:

[root@localhost ~]# hostnamectl --static set-hostname  k8s-node-2

2.配置hosts

在三台机器上都要设置hosts,均执行如下命令:

[root@k8s-master ~]# vim /etc/hosts

10.1.1.2    k8s-master

10.1.1.2    etcd

10.1.1.3    k8s-node-1

10.1.1.4    k8s-node-2

3.关闭防火墙

[root@k8s-master ~]# systemctl disable firewalld.service

[root@k8s-master ~]# systemctl stop firewalld.service

4.部署Master

4.1安装docker环境

[root@k8s-master ~]# yum install -y docker

配置Docker配置文件,配置国内镜像源

[root@k8s-master ~]# vim /etc/sysconfig/docker      #添加下面一行内容

......

OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --registry-mirror=http://f2d6cb40.m.daocloud.io'

[root@k8s-master ~]# systemctl start docker

4.2安装etcd

k8s运行依赖etcd,需要先部署etcd,下面采用yum方式安装:

[root@k8s-master ~]# yum install etcd –y

yum安装的etcd默认配置文件在/etc/etcd/etcd.conf,编辑配置文件:

[root@k8s-master ~]# cat /etc/etcd/etcd.conf

启动etcd并验证状态

[root@k8s-master ~]# systemctl start etcd

[root@k8s-master ~]# ps -ef|grep etcd

指定testdir/testkey0的值为0

[root@k8s-master ~]# etcdctl set testdir/testkey0 0

0

查看testdir/testkey0值是否修改成功

[root@k8s-master ~]# etcdctl get testdir/testkey0

0

检查集群状态

[root@k8s-master ~]# etcdctl cluster-health

4.3安装kubernets

[root@k8s-master ~]# yum install kubernetes

配置并启动kubernetes

在kubernetes master上需要运行以下组件:Kubernets API Server、Kubernets Controller Manager、Kubernets Scheduler

[root@k8s-master ~]# vim /etc/kubernetes/apiserver

[root@k8s-master ~]# vim /etc/kubernetes/config

启动服务并设置开机自启动

[root@k8s-master ~]# systemctl enable kube-apiserver.service

[root@k8s-master ~]# systemctl start kube-apiserver.service

[root@k8s-master ~]# systemctl enable kube-controller-manager.service

[root@k8s-master ~]# systemctl start kube-controller-manager.service

[root@k8s-master ~]# systemctl enable kube-scheduler.service

[root@k8s-master ~]# systemctl start kube-scheduler.service

5.部署Node(在两台node节点机器上都要操作)

5.1安装docker

[root@k8s-node-1 ~]# yum install -y docker

配置Docker配置文件

[root@k8s-node-1 ~]# vim /etc/sysconfig/docker      #添加下面一行内容

......

OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --registry-mirror=http://f2d6cb40.m.daocloud.io'

[root@k8s-node-1 ~]# systemctl start docker

5.2安装kubernets

[root@k8s-node-1 ~]# yum install kubernetes

配置并启动kubernetes

在kubernetes node上需要运行以下组件:Kubelet、Kubernets Proxy

[root@k8s-node-1 ~]# vim /etc/kubernetes/config

[root@k8s-node-1 ~]# vim /etc/kubernetes/kubelet

KUBELET_HOSTNAME="--hostname-override=k8s-node-1"

#特别注意这个,在另一个node2节点上,要改为k8s-node-2

启动服务并设置开机自启动

[root@k8s-node-1 ~]# systemctl enable kubelet.service

[root@k8s-node-1 ~]# systemctl start kubelet.service

[root@k8s-node-1 ~]# systemctl enable kube-proxy.service

[root@k8s-node-1 ~]# systemctl start kube-proxy.service

查看状态

在master上查看集群中节点及节点状态

[root@k8s-master ~]# kubectl get node

6.创建覆盖网络—Flannel

6.1安装Flannel(在master、node上均执行如下命令)

[root@k8s-master ~]# yum install flannel

6.2配置Flannel(在master、node上均编辑/etc/sysconfig/flanneld)

[root@k8s-master ~]# vim /etc/sysconfig/flanneld

6.3配置etcd(这个只在master上操作)

Flannel使用Etcd进行配置,来保证多个Flannel实例之间的配置一致性,所以需要在etcd上进行如下配置:('/atomic.io/network/config'这个key与上文/etc/sysconfig/flannel中的配置项FLANNEL_ETCD_PREFIX是相对应的,错误的话启动就会出错)

[root@k8s-master ~]# etcdctl mk /atomic.io/network/config '{ "Network": "182.48.0.0/16" }'

{ "Network": "182.48.0.0/16" }

6.4启动Flannel

启动Flannel之后,需要依次重启docker、kubernete。

 

在master执行:

[root@k8s-master ~]# systemctl enable flanneld.service

[root@k8s-master ~]# systemctl start flanneld.service

[root@k8s-master ~]# service docker restart

[root@k8s-master ~]# systemctl restart kube-apiserver.service

[root@k8s-master ~]# systemctl restart kube-controller-manager.service

[root@k8s-master ~]# systemctl restart kube-scheduler.service

 

在node上执行:

[root@k8s-node-1 ~]# systemctl enable flanneld.service

[root@k8s-node-1 ~]# systemctl start flanneld.service

[root@k8s-node-1 ~]# service docker restart

[root@k8s-node-1 ~]# systemctl restart kubelet.service

[root@k8s-node-1 ~]# systemctl restart kube-proxy.service

然后通过ifconfig命令查看maste和node节点,发现docker0网桥网络的ip已经是上面指定的182.48.0.0网段了。并且在master和node节点上创建的容器间都是可以相互通信的,能相互ping通!

7.部署nginx pod 和复制器

下面来安装一个简单的静态内容的nginx应用:

用复制器启动一个2个备份的nginx Pod,然后在前面挂Service,一个service只能被集群内部访问,一个能被集群外的节点访问。下面所有的命令都是在master管理节点上运行的。

7.1部署nginx pod 和复制器

通过下面命令发现apiVersion版本是v1

[root@k8s-master ~]# curl -s -L http://182.48.115.237:8080/api/v1beta1/version | python -mjson.tool

开始创建pod单元

[root@k8s-master ~]# mkdir -p /home/kubermange && cd /home/kubermange

[root@k8s-master kubermange]# vim nginx-rc.yaml

apiVersion: v1

kind: ReplicationController

metadata:

name: nginx-controller

spec:

replicas: 2                              #即2个备份

selector:

name: nginx

template:

metadata:

labels:

name: nginx

spec:

containers:

- name: nginx

image: docker.io/nginx

ports:

- containerPort: 80

[root@k8s-master kubermange]# kubectl create -f nginx-rc.yaml

replicationcontroller "nginx-controller" created

 

由于kubernetes要去gcr.io下载gcr.io/google_containers/pause镜像,然后下载nginx镜像,所以所创建的Pod需要等待一些时间才能处于running状态。

 

然后查看pods清单

[root@k8s-master kubermange]# kubectl get pods

可以使用describe 命令查看pod所分到的节点:

[root@k8s-master kubermange]# kubectl describe pod nginx-controller-f0j9c

由上可以看出,这个复制器启动了两个Pod,分别运行在182.48.115.238和182.48.115.239这两个节点上了。到这两个节点上查看,发现已经有nginx应用容器创建。

发表评论

电子邮件地址不会被公开。 必填项已用*标注