kubernetes学习与实践篇(二) kubernetes1.5 的安装和集群环境部署
kubernetes 1.5 的安装和集群环境部署
文章转载自:http://www.cnblogs.com/tynia/p/k8s-cluster.html
简介:
Docker:是一个开源的应用容器引擎,可以为应用创建一个轻量级的、可移植的、自给自足的容器。
Kubernetes:由Google开源的Docker容器集群管理系统,为容器化的应用提供资源调度、部署运行、服务发现、扩容缩容等功能。
Etcd:由CoreOS开发并维护的一个高可用的键值存储系统,主要用于共享配置和服务发现。
Flannel:Flannel是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具,其目的在于帮助每一个使用 Kuberentes 的 CoreOS 主机拥有一个完整的子网。
目标:
- etcd集群的搭建;
- docker安装和配置(简单介绍);
- flannel安装和配置(简单介绍);
- k8s集群部署;
准备工作:
| 主机 | 运行服务 | 角色 |
|---|---|---|
| 192.168.39.40(centos7.1) | etcd docker flannel kube-apiserver kube-controller-manager kube-scheduler |
k8s-master |
| 192.168.39.42(centos7.1) | etcd docker flannel kubelet kube-proxy |
minion1 |
| 192.168.39.43(centos7.1) | etcd docker flannel kubelet kube-proxy |
minion2 |
安装:
centOS下使用yum安装etcd、docker、flannel的rpm安装包,例如:
#yum install etcd flannel docker -y
etcd和flannel的安装比较简单,没有依赖关系。docker的安装因为有依赖关系,需要先安装docker的依赖包,才能安装成功。此处不是本文的重点,不做赘述。
三台机器上,都必须安装etcd、docker和flannel
下载kubernetes 1.5版本的二进制包,点击下载
下载完成后执行一下操作,以在 192.168.39.40上为例:
|
1
2
3
4
5
6
7
8
|
# tar zxvf kubernetes1.5.tar.gz # 解压二进制包# cd kubernetes/server# tar zxvf kubernetes-server-linux-amd64.tar.gz # 解压master所需的安装包# cd kubernetes/server/bin/# cp kube-apiserver kube-controller-manager kubectl kube-scheduler /usr/bin #把master需要的程序,拷贝到/usr/bin下,也可以设置环境变量达到相同目的# scp kubelet kube-proxy root@192.168.39.42:~ # 把minion需要的程序,scp发送到minion上# scp kubelet kube-proxy root@192.168.39.43:~# |
注意,kubernetes/server目录下可能没有kubernetes-server-linux-amd64.tar.gz,只需要下载这个包,之后在当前目录下解压就好了。

配置和部署:
1. etcd的配置和部署
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# [member]ETCD_NAME="etcd-2"ETCD_DATA_DIR="/data/etcd/"#ETCD_WAL_DIR=""#ETCD_SNAPSHOT_COUNT="10000"#ETCD_HEARTBEAT_INTERVAL="100"#ETCD_ELECTION_TIMEOUT="1000"#ETCD_LISTEN_PEER_URLS="http://localhost:2380" # 去掉默认的配置ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"#ETCD_LISTEN_CLIENT_URLS="http://localhost:2379" # 去掉默认的配置ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"#ETCD_MAX_SNAPSHOTS="5"#ETCD_MAX_WALS="5"#ETCD_CORS=""##[cluster]#ETCD_INITIAL_ADVERTISE_PEER_URLS="http://localhost:2380"ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.39.42:2380"# if you use different ETCD_NAME (e.g. test), set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://..."#ETCD_INITIAL_CLUSTER="default=http://localhost:2380"ETCD_INITIAL_CLUSTER="etcd-1=http://192.168.39.40:2380,etcd-2=http://192.168.39.42:2380,etcd-3=http://192.168.39.43:2380"# 此处的含义为,要配置包含有3台机器的etcd集群ETCD_INITIAL_CLUSTER_STATE="new"#ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster1"#ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"ETCD_ADVERTISE_CLIENT_URLS="http://192.168.39.42:2379"#ETCD_DISCOVERY=""#ETCD_DISCOVERY_SRV=""#ETCD_DISCOVERY_FALLBACK="proxy"#ETCD_DISCOVERY_PROXY=""##[proxy]#ETCD_PROXY="off"#ETCD_PROXY_FAILURE_WAIT="5000"#ETCD_PROXY_REFRESH_INTERVAL="30000"#ETCD_PROXY_DIAL_TIMEOUT="1000"#ETCD_PROXY_WRITE_TIMEOUT="5000"#ETCD_PROXY_READ_TIMEOUT="0"##[security]#ETCD_CERT_FILE=""#ETCD_KEY_FILE=""#ETCD_CLIENT_CERT_AUTH="false"#ETCD_TRUSTED_CA_FILE=""#ETCD_PEER_CERT_FILE=""#ETCD_PEER_KEY_FILE=""#ETCD_PEER_CLIENT_CERT_AUTH="false"#ETCD_PEER_TRUSTED_CA_FILE=""##[logging]ETCD_DEBUG="true"# examples for -log-package-levels etcdserver=WARNING,security=DEBUGETCD_LOG_PACKAGE_LEVELS="etcdserver=WARNING" |
修改三台机器中etcd的服务配置: /usr/lib/systemd/system/etcd.service。修改后的文件内容为:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[Unit]Description=Etcd ServerAfter=network.targetAfter=network-online.targetWants=network-online.target[Service]Type=notifyWorkingDirectory=/var/lib/etcd/EnvironmentFile=-/etc/etcd/etcd.confUser=etcd# set GOMAXPROCS to number of processorsExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /usr/bin/etcd --name=\"${ETCD_NAME}\" --data-dir=\"${ETCD_DATA_DIR}\" --listen-client-urls=\"${ETCD_LISTEN_CLIENT_URLS}\" --listen-peer-urls=\"${ETCD_LISTEN_PEER_URLS}\" --advertise-client-urls=\"${ETCD_ADVERTISE_CLIENT_URLS}\" --initial-advertise-peer-urls=\"${ETCD_INITIAL_ADVERTISE_PEER_URLS}\" --initial-cluster=\"${ETCD_INITIAL_CLUSTER}\" --initial-cluster-state=\"${ETCD_INITIAL_CLUSTER_STATE}\""Restart=on-failureLimitNOFILE=65536[Install]WantedBy=multi-user.target |
在每台机器上执行:
1 # systemctl enable etcd.service
2 # systemctl start etcd.service
然后选择一台机器,在其上执行:
1 # etcdctl set /cluster "example-k8s"
再选取另外一台机器,执行:
1 # etcdctl get /cluster
如果返回 “example-k8s”,则etcd集群部署成功。
2. docker的配置和部署
|
1
2
3
|
ADD_REGISTRY="--add-registry docker.midea.registry.hub:10050"DOCKER_OPTS="--insecure-registry docker.midea.registry.hub:10050"INSECURE_REGISTRY="--insecure-registry docker.midea.registry.hub:10050" |
以上配置项为本地 register 的地址和服务端口,在docker的服务启动项中有用。具体register的搭建,请参考上一篇文章。

1 [Unit]
2 Description=Docker Application Container Engine
3 Documentation=http://docs.docker.com
4 After=network.target
5 Wants=docker-storage-setup.service
6
7 [Service]
8 Type=notify
9 NotifyAccess=all
10 EnvironmentFile=-/etc/sysconfig/docker
11 EnvironmentFile=-/etc/sysconfig/docker-storage
12 EnvironmentFile=-/etc/sysconfig/docker-network
13 Environment=GOTRACEBACK=crash
#注意,在centos中,此处是个坑。docker启动的时候,systemd是无法获取到docker的pid,可能会导致后面的flannel服务无法启动,需要加上红色部分,让systemd能抓取到 docker的pid
14 ExecStart=/bin/sh -c 'exec -a docker /usr/bin/docker-current daemon \
15 --exec-opt native.cgroupdriver=systemd \
16 $OPTIONS \
17 $DOCKER_STORAGE_OPTIONS \
18 $DOCKER_NETWORK_OPTIONS \
19 $ADD_REGISTRY \
20 $BLOCK_REGISTRY \
21 $INSECURE_REGISTRY \
22 2>&1 | /usr/bin/forward-journald -tag docker'
23 LimitNOFILE=1048576
24 LimitNPROC=1048576
25 LimitCORE=infinity
26 TimeoutStartSec=0
27 MountFlags=slave
28 Restart=on-abnormal
29 StandardOutput=null
30 StandardError=null
31
32 [Install]
33 WantedBy=multi-user.target

分别在每台机器上执行:
1 # systemctl enable docker.service
2 # systemctl start docker
检测docker的运行状态很简单,执行
1 # docker ps
查看是否能正常列出运行中的容器的各个元数据项即可(此时没有container运行,只列出各个元数据项):
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3. flannel的配置和部署

1 # Flanneld configuration options
2
3 # etcd url location. Point this to the server where etcd runs
4 FLANNEL_ETCD="http://192.168.39.40:2379"
5
6 # etcd config key. This is the configuration key that flannel queries
7 # For address range assignment
8 FLANNEL_ETCD_KEY="/k8s/network" #这是一个目录,etcd中的目录
9
10 # Any additional options that you want to pass
11 FLANNEL_OPTIONS="--logtostderr=false --log_dir=/var/log/k8s/flannel/ --etcd-endpoints=http://192.168.39.40:2379"

然后执行:
# etcdctl mkdir /k8s/network
# etcdctl set /k8s/network/config '{"Network":"172.100.0.0/16"}'
该命令含义是,期望docker运行的container实例的地址,都在 172.100.0.0/16 网段中
# systemctl enable flanneld.service
# systemctl stop docker # 暂时先关闭docker服务,启动flanneld的时候,会自动拉起docker服务
# systemctl start flanneld.service
# systemctl start docker
命令执行完成,如果没有差错的话,就会顺利地拉起docker。此处必须先启动flanneld再启动docker。

# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1472
inet 172.100.28.1 netmask 255.255.255.0 broadcast 0.0.0.0
inet6 fe80::42:86ff:fe81:6892 prefixlen 64 scopeid 0x20<link>
ether 02:42:86:81:68:92 txqueuelen 0 (Ethernet)
RX packets 29 bytes 2013 (1.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 25 bytes 1994 (1.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.39.40 netmask 255.255.255.0 broadcast 172.20.30.255
inet6 fe80::f816:3eff:fe43:21ac prefixlen 64 scopeid 0x20<link>
ether fa:16:3e:43:21:ac txqueuelen 1000 (Ethernet)
RX packets 13790001 bytes 3573763877 (3.3 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 13919888 bytes 1320674626 (1.2 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 flannel0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1472
inet 172.100.28.0 netmask 255.255.0.0 destination 172.100.28.0
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2 bytes 120 (120.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 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 65311 bytes 5768287 (5.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 65311 bytes 5768287 (5.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

以上描述,就部署好了基本的环境,接下来要部署和启动kubernetes服务。
4. kubenetes 部署
#! /bin/sh
# firstly, start etcd
systemctl restart etcd
# secondly, start flanneld
systemctl restart flanneld
# then, start docker
systemctl restart docker
# start the main server of k8s master
nohup kube-apiserver --insecure-bind-address=0.0.0.0 --insecure-port=8080 --cors_allowed_origins=.* --etcd_servers=http://172.20.30.19:4001 --v=1 --logtostderr=false --log_dir=/var/log/k8s/apiserver --service-cluster-ip-range=172.100.0.0/16 &
nohup kube-controller-manager --master=172.20.30.19:8080 --enable-hostpath-provisioner=false --v=1 --logtostderr=false --log_dir=/var/log/k8s/controller-manager &
nohup kube-scheduler --master=172.20.30.19:8080 --v=1 --logtostderr=false --log_dir=/var/log/k8s/scheduler &
然后赋予执行权限:
# chmod u+x start_k8s_master.sh
由于安装k8s的操作,已经把kubelet和kube-proxy发送到作为minion机器上了(我们已经悄悄地定义好了k8s集群)
#! /bin/sh
# firstly, start etcd
systemctl restart etcd
# secondly, start flanneld
systemctl restart flanneld
# then, start docker
systemctl restart docker
# start the minion
nohup kubelet --address=0.0.0.0 --port=10250 --v=1 --log_dir=/var/log/k8s/kubelet --hostname_override=172.20.30.21 --api_servers=http://172.20.30.19:8080 --logtostderr=false &
nohup kube-proxy --master=172.20.30.19:8080 --log_dir=/var/log/k8s/proxy --v=1 --logtostderr=false &
然后赋予执行权限:
# chmod u+x start_k8s_minion.sh
发送该脚本到作为minion的主机上。
运行k8s
# ./start_k8s_master.sh
在作为minion的主机上,执行:
# ./start_k8s_minion.sh
在master主机上,执行:
# kubectl get node
NAME STATUS AGE
192.168.39.42 Ready 5h
192.168.39.43 Ready 5h
172.20.30.21 Ready 5h
列出以上信息,则表示k8s集群部署成功。
参考:
kubernetes学习与实践篇(二) kubernetes1.5 的安装和集群环境部署的更多相关文章
- k8s学习笔记之二:使用kubeadm安装k8s集群
一.集群环境信息及安装前准备 部署前操作(集群内所有主机): .关闭防火墙,关闭selinux(生产环境按需关闭或打开) .同步服务器时间,选择公网ntpd服务器或者自建ntpd服务器 .关闭swap ...
- kubernetes 1.3 的安装和集群环境部署
简介: Docker:是一个开源的应用容器引擎,可以为应用创建一个轻量级的.可移植的.自给自足的容器. Kubernetes:由Google开源的Docker容器集群管理系统,为容器化的应用提供资源调 ...
- Hadoop 学习之路(四)—— Hadoop单机伪集群环境搭建
一.前置条件 Hadoop的运行依赖JDK,需要预先安装,安装步骤见: Linux下JDK的安装 二.配置免密登录 Hadoop组件之间需要基于SSH进行通讯. 2.1 配置映射 配置ip地址和主机名 ...
- Kubernetes 学习笔记(二):本地部署一个 kubernetes 集群
前言 前面用到过的 minikube 只是一个单节点的 k8s 集群,这对于学习而言是不够的.我们需要有一个多节点集群,才能用到各种调度/监控功能.而且单节点只能是一个加引号的"集群&quo ...
- ZooKeeper学习之路(二)—— Zookeeper单机环境和集群环境搭建
一.单机环境搭建 1.1 下载 下载对应版本Zookeeper,这里我下载的版本3.4.14.官方下载地址:https://archive.apache.org/dist/zookeeper/ # w ...
- Kubernetes全栈架构师(Kubeadm高可用安装k8s集群)--学习笔记
目录 k8s高可用架构解析 Kubeadm基本环境配置 Kubeadm系统及内核升级 Kubeadm基本组件安装 Kubeadm高可用组件安装 Kubeadm集群初始化 高可用Master及Token ...
- Kubernetes全栈架构师(二进制高可用安装k8s集群部署篇)--学习笔记
目录 二进制高可用基本配置 二进制系统和内核升级 二进制基本组件安装 二进制生成证书详解 二进制高可用及etcd配置 二进制K8s组件配置 二进制使用Bootstrapping自动颁发证书 二进制No ...
- 高可用Kubernetes集群-1. 集群环境
参考文档: 部署kubernetes集群1:https://github.com/opsnull/follow-me-install-kubernetes-cluster 部署kubernetes集群 ...
- Kubernetes实战指南(三十四): 高可用安装K8s集群1.20.x
@ 目录 1. 安装说明 2. 节点规划 3. 基本配置 4. 内核配置 5. 基本组件安装 6. 高可用组件安装 7. 集群初始化 8. 高可用Master 9. 添加Node节点 10. Cali ...
随机推荐
- 4.git "Could not read from remote repository.Please make sure you have the correct access rights."解决方案
转自:https://zhiku8.com/git-could-not-read-from-remote-repository.html 我们在使用git clone 或其他命令的时候,有时候会遇到这 ...
- elementUI 易错点
1.element table里面添加单选时,如果存在下拉框的筛选功能,那么每次下拉框筛选条件变化时 都得清空之前选中的信息,如果不数据更新后如果更新后的数据跟之前选中的相同 则会无法选中
- Mybatis传递多个参数的解决办法(三种)
第一种方案 DAO层的函数方法 Public User selectUser(String name,String area); 对应的Mapper.xml <select id="s ...
- luogu P4062 [Code+#1]Yazid 的新生舞会(线段树+套路)
今天原来是平安夜啊 感觉这题是道好题. 一个套路枚举权值\(x\),把权值等于\(x\)的设为1,不等于的设为-1,然后问题转化为多少个区间权值和大于. 发现并不是很好做,还有一个套路,用前缀和查分来 ...
- unity Android在streamingAssets路径下文件无法读取的的解决方法
unity Android在streamingAssets路径下文件,有时候plugin下的.jar或者.so无法直接读取: 解决方法之一,拷贝至其他路径: #if UNITY_ANDROID str ...
- 疯狂软件对Oracle放弃Java EE的看法
近日网络上出现了一些关于Oracle将要放弃Java EE的说法,在Java行业引起不小的关注,甚至有些人开始担心Java会不会就此消亡,但事实上这不过是杞人忧天,疯狂软件教学总监李刚根据多年来Jav ...
- 【转】Java集合间的相互转换
下面代码演示了List<-->数组.List<-->Set.数组<-->Set.Map将键转化为Set.Map将值转化为Set.Map将值转化为List等集合常用转 ...
- 在Windows Server 2008 R2中删除网桥
How to remove a network bridge in Windows Server 2008 R2 症状: 删除网桥的时候,按理说应该在“网络连接”中选择要被删除的网桥,右键点击,然后选 ...
- IntelliJ IDEA 进行Maven项目创建build
IntelliJ IDEA 进行Maven项目创建build 1,文件-新建-maven 项目:2,编写pom.xml文件:3,鼠标放到左下,然后选择Maven Projects,然后可以查看项目信息 ...
- 我的Android进阶之旅------>怎样将Activity变为半透明的对话框?
我的Android进阶之旅------>怎样将Activity变为半透明的对话框?能够从两个方面来考虑:对话框和半透明. 在定义Activity时指定Theme.Dialog主题就能够将Acti ...