1. 虚拟机上搭建分布式基础环境

(1) 安装准备
Windows10 64位,vmware workstation 12、CentOS-7-x86_64-DVD-1611.iso
(2) 安装过程
1) 安装VMware
按步骤安装。
2) 安装CentOS
按步骤安装。注意设置用户密码。
3) 开启安装成功的虚拟机,配置网络。
联网,配置静态IP,静态IP为192.168.5.101。可以根据自己需要配置一些基础环境,比如JDK等。
4) 克隆虚拟机
刚才已经创建了一台虚拟机,并配好了静态IP等,接下来可以根据VMware的克隆功能快速扩充新的虚拟机,克隆前先将电源关闭。
首先右键选择拍摄快照,之后在克隆时克隆源选择“现有快照”,之后修改虚拟机名称,按步骤进行克隆。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
原虚拟机名称为master,新克隆的两台名称分别为node1和node2,至此已经创建了三台虚拟机。node1的静态IP设为192.168.5.102,node2的静态IP设为192.168.5.103。至此通过VMware搭建分布式基础环境就基本完成了。
在这里插入图片描述
参考博客:https://blog.csdn.net/cndmss/article/details/80149952

  • 网络连接失败
    解决方案:克隆虚拟机之后修改Mac地址和IP地址,最后重启网络。
【问题】
[root@localhost Desktop]# ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 258  bytes 22412 (21.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 258  bytes 22412 (21.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@localhost Desktop]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# ls
ifcfg-eno16777736  ifdown-ppp       ifup-eth     ifup-sit
ifcfg-lo           ifdown-routes    ifup-ippp    ifup-Team
ifdown             ifdown-sit       ifup-ipv6    ifup-TeamPort
ifdown-bnep        ifdown-Team      ifup-isdn    ifup-tunnel
ifdown-eth         ifdown-TeamPort  ifup-plip    ifup-wireless
ifdown-ippp        ifdown-tunnel    ifup-plusb   init.ipv6-global
ifdown-ipv6        ifup             ifup-post    network-functions
ifdown-isdn        ifup-aliases     ifup-ppp     network-functions-ipv6
ifdown-post        ifup-bnep        ifup-routes

[root@localhost network-scripts]# vi ifcfg-eno16777736 
[root@localhost network-scripts]# service network restart
Restarting network (via systemctl):  Job for network.service failed. See 'systemctl status network.service' and 'journalctl -xn' for details.
                                                           [FAILED]
[root@localhost network-scripts]# vi ifcfg-eno16777736 
[root@localhost network-scripts]# service network restart
Restarting network (via systemctl):                        [  OK  ]
[root@localhost network-scripts]# 

2. 部署kubernetes

(1) 部署规划
这里我用3台虚拟机搭建一个简单的集群:

192.168.5.101 # master节点(etcd,kubernetes-master)
192.168.5.102 # node1节点(etcd,kubernetes-node,docker,flannel)
192.168.5.103 # node2节点(etcd,kubernetes-node,docker,flannel)

(2)部署过程

  • 各个节点安装docker

两种方法:
方法(1)yum源安装
1)更新yum源

$ yum update

2)添加yum仓库【repo文件是Fedora中yum源的配置文件】

$ tee /etc/yum.repos.d/docker.repo <<EOF
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

3)安装docker包

$ sudo yum install docker-engine

4)启动docker服务

$ sudo service docker start

5)测试是否安装成功

$ sudo docker run hello-world

6)配置docker开机自启动

$ sudo systemctl enable docker.service

方法(2)使用脚本安装
1)更新yum源

$ sudo yum update

2)下载的脚本可以添加docker.repo到仓库并安装docker

$ curl -fsSL https://get.docker.com/ | sh
  1. 启动docker服务
$ sudo service docker start

4)测试docker是否安装成功

$ sudo docker run hello-world
  • 创建docker用户组

默认docker只能由root用户操作,或者是其它用户sudo操作。
1) 添加docker用户组

$ sudo groupadd docker  
  1. 向docker用户组添加普通用户
$ sudo usermod -aG docker your_username

3)直接用普通用户使用docker

$ docker run hello-world
  • Master和node安装k8s

1)Master节点上安装:

yum install kubernetes-master etcd flannel -y

2)两个Node节点上分别安装:

yum install kubernetes-node etcd flannel -y
  • etcd集群配置

master修改etcd配置文件:

[root@s1]# cat /etc/etcd/etcd.conf |grep -v "^#"

ETCD_NAME=etcd1
ETCD_DATA_DIR="/var/lib/etcd/etcd1.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.5.101:2380"
ETCD_LISTEN_CLIENT_URLS="http:// 192.168.5.101:2379,http://127.0.0.1:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http:// 192.168.5.101:2380"
ETCD_INITIAL_CLUSTER="etcd0=http:// 192.168.5.101:2380,etcd1=http:// 192.168.5.102:2380,etcd2=http:// 192.168.5.103:2380”
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS=http:// 192.168.5.101:2379

Node1节点修改etcd配置文件

[root@ s2 ~]# cat /etc/etcd/etcd.conf |grep -v "^#"
ETCD_NAME=etcd2
ETCD_DATA_DIR="/var/lib/etcd/etcd2"
ETCD_LISTEN_PEER_URLS="http:// 192.168.5.102:2380"
ETCD_LISTEN_CLIENT_URLS="http:// 192.168.5.102:2379, http://127.0.0.1:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http:// 192.168.5.102:2380"
ETCD_INITIAL_CLUSTER="etcd0=http:// 192.168.5.101:2380,etcd1=http:// 192.168.5.102:2380,etcd2=http:// 192.168.5.103:2380"
ETCD_INITIAL_CLUSTER_STATE="existing"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS=http:// 192.168.5.102:2379

Node2节点修改etcd配置文件

[root@ s2 ~]# cat /etc/etcd/etcd.conf |grep -v "^#"
ETCD_NAME=etcd3
ETCD_DATA_DIR="/var/lib/etcd/etcd3"
ETCD_LISTEN_PEER_URLS="http:// 192.168.5.103:2380"
ETCD_LISTEN_CLIENT_URLS="http:// 192.168.5.103:2379, http://127.0.0.1:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http:// 192.168.5.103:2380"
ETCD_INITIAL_CLUSTER="etcd0=http:// 192.168.5.101:2380,etcd1=http:// 192.168.5.102:2380,etcd2=http:// 192.168.5.103:2380"
ETCD_INITIAL_CLUSTER_STATE="existing"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS=http:// 192.168.5.103:2379

关于配置文件中一些解释:
在这里插入图片描述

分别在3个节点上启动etcd,并设置为开机自启:

systemctl restart etcd && systemctl enable etcd
  • 配置k8s master(以下配置操作均在master节点上)

1)首先配置/etc/kubernetes/config文件
修改/etc/kubernetes/config文件如下:

KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=true"
KUBE_MASTER="--master=http://192.168.5.101:8080"

(2)配置启动apiserver

vi /etc/kubernetes/apiserver 【修改文件如下】:
KUBE_API_ADDRESS="--address=0.0.0.0"         #设为全部监听
KUBE_API_PORT="--port=8080"
KUBELET_PORT="--kubelet-port=10250"
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.5.101:2379,http:/ /192.168.5.102:2379,http:// 192.168.5.103:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"

(3)Kube-Controller-Manager,Kube-Scheduler配置文件暂时不做修改

(4)启动Master上的三个服务

systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl enable kube-apiserver
systemctl enable kube-controller-manager
systemctl enable kube-scheduler
  • 配置k8s node(以下配置操作均在node节点上)

(1) node1,node2节点上均要配置/etc/kubernetes/config文件

KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://192.168.5.101:8080"

(2) node1,node2上均要修改kubelet配置:

vi /etc/kubernetes/kubelet 

KUBELET_ADDRESS="--address=127.0.0.1" 
KUBELET_HOSTNAME="--hostname-override=192.168.5.102"
#【注】:此项以node1为例,node2上ip换成192.168.5.103

KUBELET_API_SERVER="--api-servers=http://192.168.5.102:8080"

KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""

(3)分别启动kubernetes node服务并设为开机启动

systemctl start kubelet
systemctl start kube-proxy
systemctl enable kubelet
systemctl enable kube-proxy
  • k8s flannel网络配置

flannel以插件的形式配置在kubernetes集群中,flannel作用:
flannel通过与etcd进行通信获取整个集群网段信息并进行子网的二次分配,使得每个minion节点都能拥有一个唯一的子网网段,进而确保在整个k8s集群中运行的docker容器都能获得唯一的ip地址。
(1) master,node1,node2上配置flannel

vi /etc/sysconfig/flanneld 

FLANNEL_ETCD="http://172.16.110.135:2379"  #本机的etcd服务,node1改为102,node2改为103
FLANNEL_ETCD_KEY="/coreos.com/network"  #指定的一个key,安装etcd服务端时执行了的命令中要给这个key赋值,value就是每个节点上docker容器的ip范围

(2)接下来有三种方法操作:
方法一:
第一步:为flannel创建分配的网络
1)# 只在master上etcd执行

etcdctl mk /coreos.com/network/config '{"Network": "10.1.0.0/16"}'

2)# 若要重新建,先删除

etcdctl rm /coreos.com/network/ --recursive

第二步:重置docker0网桥的配置
删除docker启动时默认创建的docker0网桥,flannel启动时会获取到一个网络地址,并且配置docker0的IP地址,作为该网络的网关地址,若此时docker0上配置有IP地址,那么flannel将会启动失败。
删除docker启动时默认创建的docker0网桥:ip link del docker0

方法二:
第一步:启动FLANNEL

systemctl start flannel

第二步:修改docker网络
修改docker的service文件:
在执行前增加配置文件:

    EnvironmentFile=-/etc/sysconfig/flanneld
    EnvironmentFile=-/run/flannel/subnet.env

执行命令增加参数 --bip=${FLANNEL_SUBNET}
第三步:重启docker

systemctl daemon-reload
systemctl restart docker

【注】若配置完Flannel后,启动失败:
FLANNEL_ETCD_PREFIX很可能是/atomic.io/network,将其改为/coreos.com/network,或者也可以通过-etcd-prefix指定。

  • 测试是否安装成功

master上执行下面,检查kubernetes的状态

kubectl get nodes

master上执行下面,检查etcd的状态

etcdctl  member list

centos7查看日志命令: journalctl -xe


以上是周会报告整理。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐