kubeadm 在线搭建k8s环境

1.各相关组件及主机环境

centos、docker-ce、kubernetes1.12

集群主机环境

主机ip 主机名 角色
10.57.31.22 k8s-master master
10.57.31.23 k8s-node-1 node1
10.57.31.24 k8s-node-2 node2

将上面的主机配置添加到master和node上的/etc/hosts中

2.主机系统环境设置

  1. 关闭防火墙服务
systemctl stop firewalld.service iptables.service
systemctl disable firewalld.service
systemctl disable iptables.service
  1. 关闭并禁用SELinux

setenforce 0

//彻底禁用SELinux
sed -i 's@^(SELINUX=).*@\1disabled@' /etc/sysconfig/selinux

  1. 禁用swap设备(可选)
swapoff -a

而后编辑/etc/fstab配置文件,注释用户挂载swap设备的所有行

3.docker安装

master和node上都需要安装

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

如果安装中出现Transaction check error:错误,说明之前安装过docker未清理干净,需要执行下 sudo yum erase docker-common-2:1.13.1-96.gitb2f74b2.el7.centos.x86_64(根据报错是什么版本后面就写什么 );安装下载不成功,执行yum clean all试试

kubeadm构建集群的过程中需要到gcr.io获取docker镜像,所以需要配置能够访问的http代理,或者从自己的Registry仓库拉取镜像,代理的方法是在[service]配置端中添加类似如下格式的配置项:Environment="HTTP-PROXY=http://IP:PORT"或Environment="HTTPS-PROXY=https://IP:PORT,(后面我们会介绍另外一种拉取gcr.io镜像的方法)

docker自1.13起自动设置iptables的FORWARD默认策略为DROP,这会影响k8s的报文转发,因此,需要早docker启动后,更改为ACCEPT;方式为修改/usr/lib/systemd/system/docker.service文件,在"ExecStat=/usr/bin/dockerd"一行之后新增一行如下内容:

EexcStartPost=/usr/sbin/iptables -P FORWARD ACCEPT

温馨提示:docker的镜像下载慢,需要更改daemon.json,在/etc/docker/daemon.json文件(没有则创建),文件内容为
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
后面的地址可以使用别的快的,国内的;这里是中国科技大学的镜像加速服务

然后重启下docker

systemctl daemon-reload
systemctl start docker.service
systemctl enable docker.service

4.安装kubelet及kubeadm

采用阿里云仓库中rpm方式安装;还有其他方式自行研究下

4.1配置yum仓库

编辑配置文件/etc/yum.repos.d/kubernetes.repo,内容如下:

[kubernetes]
name=Kubernetes
baseurl= https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey= https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

4.2然后执行命令安装程序包

master上安装kubelet、kubeadm、kubectl
node上安装kubelet、kubeadm

 yum install kubelet kubeadm kubectl

4.3

关闭下kubelet需要强制关闭swap的需求,编辑/etc/sysconfig/kubelet,设置参数:

KUBELET_EXTRA_ARGS="--fail-swap-on=false"
然后

systemctl restart kubelet.service
systemctl enable kubelet.service

4.4提前下载下gcr.io的镜像

先看下需要哪些镜像,kubeadm config images list


image.png

我们通过 docker.io/mirrorgooglecontainers 中转一下
脚本如下:

//下载镜像
kubeadm config images list |sed -e 's/^/docker pull /g' -e 's#k8s.gcr.io#docker.io/mirrorgooglecontainers#g' |sh -x
//打tag
 docker images |grep mirrorgooglecontainers |awk '{print "docker tag ",$1":"$2,$1":"$2}' |sed -e 's#mirrorgooglecontainers#k8s.gcr.io#2' |sh -x
//移除mirrorgooglecontainers的镜像
docker images |grep mirrorgooglecontainers |awk '{print "docker rmi ", $1":"$2}' |sh -x
//coredns需要单独下载
docker pull coredns/coredns:1.3.1
docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
docker rmi coredns/coredns:1.3.1

可惜的是最新版本的1.15.2在中转站里面没有,我只下载到了这些:


image.png

还剩下controller-manager和scheduler需要下载,采取另外一种方式手动下载这两个,参考我的另外一片文章https://www.jianshu.com/p/447130682e08
(也可以使用其他能够下到镜像的方式)

最后我们把镜像重新docker tag成kubeadm需要的镜像,最终结果


image.png

5.集群初始化(master)

采用命令行方式
说明:

--kubernetes-version: 正在使用的k8s的版本号,可以看下相关docker镜像的版本
--pod-network-cidr: Pod网络的地址范围;
--service-cidr:的网路地址范围
--apiserver-advertise-address: Apiserver对外服务的地址,一般为master的ip

kubeadm init --kubernetes-version=v1.15.2 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=10.57.31.22 --ignore-preflight-errors=Swap

输出结果末尾有类似:kubeadm join 10.57.31.22:6443 --token ecc3mr.wdbc1ptao2ep6h95
--discovery-token-ca-cert-hash sha256:40045492e5e0c54ddb9b2645b989337bb29ea76e7025f38ef7465caa477dcd8e 这样的命令,记录下来用来后续添加node到集群中

5.1设定kubectl的配置文件

kubeadm会自动生成一个/etc/kubernetes/admin.conf;然后kubectl默认会使用$HOME/.kube/config作为凭据,所以我们执行

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

查看下状态

//获取组件状态
kubectl get cs
//获取节点状态,(not ready 因为还没有安装网络插件)
kubectl get nodes

6.部署网络插件Flannel

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

完成之后稍微等一会再通过kubectl get nodes就能看到Ready的master节点了

7.添加Node到集群中

使用kubeadm init输出末尾的命令,加上个--ignore-preflight-errors=Swap;到Node节点上执行命令:

kubeadm join 10.57.31.22:6443 --ignore-preflight-errors=Swap --token ecc3mr.wdbc1ptao2ep6h95  --discovery-token-ca-cert-hash sha256:40045492e5e0c54ddb9b2645b989337bb29ea76e7025f38ef7465caa477dcd8e
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容