您的位置:首页 > 其它

使用kubeadm部署kubernetes集群实践

2018-09-05 17:10 1061 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shihao99/article/details/82384798

kubenrnetes版本1.10.3

操作系统版本centos7.4,之前有个博文说了centos7.2内核版本太低,当时采用升级内核的形式,但是实在太麻烦,于是重装系统,采用centos7.4。

另外,docker安装就不在这里说了,可以自行安装,我是用的版本是docker-ce17.03

机器列表:

172.16.10.1  master

172.16.10.2  node01  etcd

172.16.10.3  node02  etcd

172.16.10.4  node03  etcd

说明:这次的集群master只有一个节点,不是高可用的部署架构。其实kubernets的高可用就是master的高可用,以后会介绍高可用方案。

1、环境准备

(1)修改hostname

为每一个master节点和node节点都设置唯一的hostname并注册到/etc/hosts文件中以保证hostaname能够解析为ip

以master为例,如下

[code]hostnamectl set-hostname --static master

(2)设置时钟同步

可以使用ntp或者其他时钟同步工具,保证集群各节点的时钟同步即可

2、部署etcd集群

kubernetes依赖etcd,因此需要先准备etcd集群,具体部署方式如下

(1)上传安装包etcd-v3.2.11-linux-amd64.tgz

解压安装包

[code]tar zxvf etcd-v3.2.11-linux-amd64.tgz -C /usr/local/

(2)准备service文件/usr/lib/systemd/system/etcd.service,内容如下

[code][Unit]
Description=EtcdServer
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
WorkingDirectory=/usr/local/etcd-v3.2.11-linux-amd64
EnvironmentFile=-/etc/etcd/etcd.conf
User=root
# setGOMAXPROCS to number of processors
ExecStart=/usr/local/etcd-v3.2.11-linux-amd64/etcd
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target

(3)准备配置文件

创建目录

[code]mkdir -p /etc/etcd/

编辑配置文件/etc/etcd/etcd.conf

[code]ETCD_NAME=etcd01
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_LISTEN_PEER_URLS="http://172.16.10.184:2380"
ETCD_LISTEN_CLIENT_URLS="http://172.16.10.184:2379,http://127.0.0.1:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.16.10.184:2380"
ETCD_INITIAL_CLUSTER="etcd01=http://172.16.10.184:2380,etcd02=http://172.16.10.186:2380,etcd03=http://172.16.10.188:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-00"
ETCD_ADVERTISE_CLIENT_URLS="http://172.16.10.184:2379"

注意

  • ETCD_NAME:该节点的名称,每个节点不能重复
  • ETCD_INITIAL_CLUSTER_TOKEN:集群token,各节点都必须相同

(4)启动etcd

启动前先关闭防火墙,不然无法启动

[code]systemctl  stop    firewalld.service
systemctl  disable firewalld.service

分别启动三个节点

[code]systemctl  enable  etcd.service
systemctl   start     etcd.service

查看集群状态是否健康

[code]/usr/local/etcd-v3.2.11-linux-amd64/etcdctl   cluster-health

3、上传并解压并修改配置

由于镜像比较大,所以把脚本和镜像分开上传了

kubeadm脚本,不含镜像:https://pan.baidu.com/s/1vMhrCywqLf5o4XbhDvTH_w  密码:c69j

镜像,直接放到脚本的image目录即可(tar包不需要解压):https://pan.baidu.com/s/1CZXFh8AmEhzZuLKc_1lnnQ 密码:u1gd

解压后首先看一下目录结构

[code][root@k8s-master kube1.10.3]# tree
.
├── bin
│   ├── kubeadm
│   ├── kubectl
│   └── kubelet
├── conf
│   ├── 10-kubeadm.conf
│   ├── dashboard
│   │   ├── dashboard-admin.yaml-bak
│   │   ├── dashboard-dp.yaml
│   │   └── kubernetes-dashboard.yaml-bak
│   ├── heapster
│   │   ├── grafana.yaml
│   │   ├── heapster.yaml
│   │   ├── influxdb.yaml
│   │   └── rbac
│   │       └── heapster-rbac.yaml
│   ├── kubeadm.yaml
│   ├── kubelet.service
│   ├── net
│       └── calico.yaml
│  
├── images
│   └── images.tar
└── shell
├── init.sh
└── master.sh

9 directories, 17 files

挨个说明一下:

(1)bin目录下是kubeadm、kubectl和kubelet三个可执行文件

(2)config目录下内容较多

  • 10-kubeadm.conf,kubelet的配置文件模板,不需要修改,因为在后续的初始化脚本中会修改这配置文件的内容
  • kubeadm.yaml,kubeadm配置文件,内容如下
[code]apiVersion: kubeadm.k8s.io/v1alpha1
kind: MasterConfiguration
etcd:
endpoints:
- http://172.16.10.2:2379
- http://172.16.10.3:2379
- http://172.16.10.4:2379
networking:
podSubnet: 192.1.0.0/16
kubernetesVersion: v1.10.3
api:
advertiseAddress: "172.16.10.1"
token: "b99a00.a144ef80536d4344"
tokenTTL: "0s"
apiServerCertSANs:
- k8s-master
- k8s-node01
- k8s-node02
- k8s-node03
- 172.16.10.1
- 172.16.10.2
- 172.16.10.3
- 172.16.10.4
featureGates:
CoreDNS: true

各个配置项都不言而喻,可根据自己环境进行修改

  • kubelet.service,kubelet服务注册文件,不需要修改
  • dashboard/和heapster/两个文件夹下的文件不需要修改
  • net的calico.yaml是calico的配置文件,如果不打算自定义clusterIp的范围的话(缺省为10.96.0.0/12)这个文件也不需要修改
  • image/下的image.tar是kubernetes所有组件以及用到的一些插件的镜像文件
  • shell/是安装kubernetes需要的脚本,重点说明

(1)init.sh初始化脚本,master和node节点都需要执行,主要进行以下几项初始化操作

  1. net.bridge.bridge-nf-call-ip6tables = 1,net.bridge.bridge-nf-call-iptables = 1,允许iptables的forward规则对bridge的数据包进行过滤
  2. net.ipv4.ip_forward=1,打开ip转发功能,所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包
  3. 关闭firewalld防火墙并禁止开机自启动
  4. 关闭防火墙
  5. 关闭selinux
  6. 加载镜像
  7. 拷贝二进制文件
  8. 拷贝配置文件
  9. 初始化kublet配置文件10-kubeadm.conf,注意如果使用默认的custerIpDidr的话,此处不需要修改,如果自定义custerIpDidr需要修改KUBELET_DNS_ARGS=--cluster-dns为你自定义的一个clusterIp
  10. 设置docker和kubelet开机自启动

(2)master.sh,只有master节点需要执行

执行kumeadm init,配置kubectl,添加calico等插件

4、执行脚本

  1. init.sh,master和node节点都执行
  2. master.sh,只在master节点执行,执行完之后会输出一串“kubeadm join xxxxx”
  3. 拷贝第2步的脚本到各个node节点执行即可

如果第2步的脚本忘了,可以通过在master节点上执行重新获取

[code]kubeadm token create --print-join-command

5、登录dashboard

使用火狐浏览器访问任意nodeIP:30000

使用如下命令获取最高权限的token

[code] kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

6、回退步骤

如果安装出现问题需要清理环境,按照下面的步骤

  1. master节点,执行kubeadm reset,然后清空calico使用的etcd的dataDir,rm -rf  /var/etcd/*
  2. node节点,关闭kubelet,执行systemctl  stop kubelet.service;然后删除所有docker容器,执行docker  rm -f $(docker ps -qa);最后删除配置文件和证书,执行rm  -rf /etc/kubernetes/*
  3. 清空etcd数据,先关闭所有的etcd节点,然后清空/var/lib/etcd/*,最后重启etcd集群
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: