http://www.bladewan.com/2018/01/02/kubernetes_install/

学习中

kubernetes V1.9安装(附离线安装包和离线镜像)

 2018-01-02 kubernetes  kubernetes  评论 字数统计: 1,724(字) 阅读时长: 8(分)
 

简介

环境信息(采用一个master节点+两个node节点)
master 192.168.2.110
node-1 192.168.2.112
node-2 192.168.2.113

软件版本
kubernetes v1.9
docker:17.03
kubeadm:v1.9.0
kube-apiserver:v1.9.0
kube-controller-manager:v1.9.0
kube-scheduler:v1.9.0
k8s-dns-sidecar:1.14.7
k8s-dns-kube-dns:1.14.7
k8s-dns-dnsmasq-nanny:1.14.7
kube-proxy:v1.9.0
etcd:3.1.10
pause :3.0
flannel:v0.9.1
kubernetes-dashboard:v1.8.1

采用kubeadm安装

kubeadm为kubernetes官方推荐的自动化部署工具,他将kubernetes的组件以pod的形式部署在master和node节点上,并自动完成证书认证等操作。
因为kubeadm默认要从google的镜像仓库下载镜像,但目前国内无法访问google镜像仓库,所以这里我提交将镜像下好了,只需要将离线包的镜像导入到节点中就可以了。

开始安装

所有节点操作

下载
链接: https://pan.baidu.com/s/1c2O1gIW 密码: 9s92
比对md5解压离线包

MD5 (k8s_images.tar.bz2) = b60ad6a638eda472b8ddcfa9006315ee

解压下载下来的离线包

1
tar -xjvf k8s_images.tar.bz2

安装docker-ce17.03(kubeadmv1.9最大支持docker-ce17.03)

1
2
rpm -ihv docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
rpm -ivh docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm

修改docker的镜像源为国内的daocloud的。

1
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://a58c8480.m.daocloud.io

启动docker-ce

1
systemctl start docker && systemctl enable docker

绑定hosts
将master和node-1、node-2绑定hosts

master节点与node节点做互信

1
2
3
[root@master ~]# ssh-keygen
[root@master ~]# ssh-copy-id node-1
[root@master ~]# ssh-copy-id node-2

关闭防火墙和selinux

1
systemctl stop firewalld && systemctl disable firewalld

vim /etc/selinux/config
SELINUX=disabled

1
setenforce 0

配置系统路由参数,防止kubeadm报路由警告

1
2
3
4
5
echo "
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
" >> /etc/sysctl.conf
sysctl -p

导入镜像

1
2
3
4
5
6
7
8
9
10
11
docker load < /root/k8s_images/docker_images/etcd-amd64_v3.1.10.tar
docker load </root/k8s_images/docker_images/flannel\:v0.9.1-amd64.tar
docker load </root/k8s_images/docker_images/k8s-dns-dnsmasq-nanny-amd64_v1.14.7.tar
docker load </root/k8s_images/docker_images/k8s-dns-kube-dns-amd64_1.14.7.tar
docker load </root/k8s_images/docker_images/k8s-dns-sidecar-amd64_1.14.7.tar
docker load </root/k8s_images/docker_images/kube-apiserver-amd64_v1.9.0.tar
docker load </root/k8s_images/docker_images/kube-controller-manager-amd64_v1.9.0.tar
docker load </root/k8s_images/docker_images/kube-scheduler-amd64_v1.9.0.tar
docker load < /root/k8s_images/docker_images/kube-proxy-amd64_v1.9.0.tar
docker load </root/k8s_images/docker_images/pause-amd64_3.0.tar
docker load < /root/k8s_images/docker_images/kubernetes-dashboard_v1.8.1.tar

安装安装kubelet kubeadm kubectl包

1
2
3
4
rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
rpm -ivh kubernetes-cni-0.6.0-0.x86_64.rpm kubelet-1.9.9-9.x86_64.rpm kubectl-1.9.0-0.x86_64.rpm
rpm -ivh kubectl-1.9.0-0.x86_64.rpm
rpm -ivh kubeadm-1.9.0-0.x86_64.rpm

master节点操作

启动kubelete

1
systemctl enable kubelet && sudo systemctl start kubelet

开始初始化master

1
kubeadm init --kubernetes-version=v1.9.0 --pod-network-cidr=10.244.0.0/16

kubernetes默认支持多重网络插件如flannel、weave、calico,这里使用flanne,就必须要设置–pod-network-cidr参数,10.244.0.0/16是kube-flannel.yml里面配置的默认网段,如果需要修改的话,需要把kubeadm init的–pod-network-cidr参数和后面的kube-flannel.yml里面修改成一样的网段就可以了。


发现kubelet启动不了
查看日志/var/log/message

发现原来是kubelet默认的cgroup的driver和docker的不一样,docker默认的cgroupfs,kubelet默认为systemd
修改

1
vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

重启reload

1
systemctl daemon-reload && systemctl restart kubelet

查看状态

此时记得将环境reset一下
执行

1
kubeadm reset

在重新执行

1
kubeadm init --kubernetes-version=v1.9.0 --pod-network-cidr=10.244.0.0/16

将kubeadm join xxx保存下来,等下node节点需要使用
如果忘记了,可以在master上通过kubeadmin token list得到

按照上面提示,此时root用户还不能使用kubelet控制集群需要,配置下环境变量
对于非root用户

1
2
3
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

对于root用户

1
export KUBECONFIG=/etc/kubernetes/admin.conf

也可以直接放到~/.bash_profile

1
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

source一下环境变量

1
source ~/.bash_profile

kubectl version测试

安装网络,可以使用flannel、calico、weave、macvlan这里我们用flannel。

下载此文件

1
wget https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml

或直接使用离线包里面的
若要修改网段,需要kubeadm –pod-network-cidr=和这里同步
vim kube-flannel.yml
修改network项

1
"Network": "10.244.0.0/16",

执行

1
kubectl create -f kube-flannel.yml

node节点操作

使用刚刚kubeadm后的kubeadm join –xxx

1
kubeadm join --token 361c68.fbafaa96a5381651 192.168.2.110:6443 --discovery-token-ca-cert-hash sha256:e5e392f4ce66117635431f76512d96824b88816dfdf0178dc497972cf8631a98

多次加入报错查看/var/log/message日志.
这个错是因为没有配置前面sysctl的router的环境变量

发现node节点启动不了flannel容器,查看容器log发现是host上没有默认路由,在网卡配置文件里面设置好默认路由。

加入成功
在master节点上check一下

kubernetes会在每个node节点创建flannel和kube-proxy的pod

测试集群

在master节点上发起个创建应用请求
这里我们创建个名为httpd-app的应用,镜像为httpd,有两个副本pod

1
kubectl run httpd-app --image=httpd --replicas=2

检查pod
可以看见pod分布在node-1和node-2上

因为创建的资源不是service所以不会调用kube-proxy
直接访问测试

至此kubernetes基本集群安装完成。

部署kubernetes-dashboard

kubernetes-dashboard是可选组件,因为,实在不好用,功能太弱了。
建议在部署master时一起把kubernetes-dashboard一起部署了,不然在node节点加入集群后,kubernetes-dashboard会被kube-scheduler调度node节点上,这样根kube-apiserver通信需要额外配置。
下载kubernetes-dashboard的配置文件或直接使用离线包里面的kubernetes-dashboard.yaml

1
wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

修改kubernetes-dashboard.yaml

如果需要让外面访问需要修改这个yaml文件端口类型为NodePort默认为clusterport外部访问不了,

nodeport端口范围30000-32767
32666就是我的映射端口,根docker run -d xxx:xxx差不多
创建kubernetes-dashboard

1
kubectl create -f kubernetes-dashboard.yaml

访问

1
https://master_ip:32666

默认验证方式有kubeconfig和token,这里我们都不用。
这里我们使用basicauth的方式进行apiserver的验证
创建/etc/kubernetes/manifests/pki/basic_auth_file 用于存放用户名和密码

#user,password,userid
admin,admin,2

给kube-apiserver添加basic_auth验证

1
vim /etc/kubernetes/manifests/kube-apiserver.yaml

加上这行

更新kube-apiserver容器

1
kubectl apply kube-apiserver.yaml

授权
k8s1.6后版本都采用RBAC授权模型
给admin授权
默认cluster-admin是拥有全部权限的,将admin和cluster-admin bind这样admin就有cluster-admin的权限。

那我们将admin和cluster-admin bind在一起这样admin也拥用cluster-admin的权限了

1
kubectl create clusterrolebinding login-on-dashboard-with-cluster-admin --clusterrole=cluster-admin --user=admin

查看

1
kubectl get clusterrolebinding/login-on-dashboard-with-cluster-admin -o yaml

在此访问https://master:32666


选基本,就可以通过用户名和密码访问了

创建个应用测试

部署成功

参考链接:
https://kubernetes.io/docs/setup/independent/install-kubeadm/
http://tonybai.com/2017/07/20/fix-cannot-access-dashboard-in-k8s-1-6-4/

[转帖] kubeadm搭建kubernetes集群的更多相关文章

  1. kubeadm搭建kubernetes集群之三:加入node节点

    在上一章<kubeadm搭建kubernetes集群之二:创建master节点>的实战中,我们把kubernetes的master节点搭建好了,本章我们将加入node节点,使得整个环境可以 ...

  2. kubeadm搭建kubernetes集群之二:创建master节点

    在上一章kubeadm搭建kubernetes集群之一:构建标准化镜像中我们用VMware安装了一个CentOS7虚拟机,并且打算用这个虚拟机的镜像文件作为后续整个kubernetes的标准化镜像,现 ...

  3. kubeadm 搭建kubernetes集群环境

    需求 kubeadm 搭建kubernetes集群环境 准备条件 三台VPS(本文使用阿里云香港 - centos7.7) 一台能SSH连接到VPS的本地电脑 (推荐连接工具xshell) 安装步骤 ...

  4. kubeadm搭建kubernetes集群之一:构建标准化镜像

    使用docker可以批量管理多个容器,但都是在同一台电脑内进行的,这在实际生产环境中是不够用的,如何突破单机的限制?让多个电脑上的容器可以像单机上的docker-compose.yml管理的那样方便呢 ...

  5. 通过Kubeadm搭建Kubernetes集群

    历经断断续续学习的两天,终于完成了一个简单k8s集群. 参考 https://www.cnblogs.com/edisonchou/p/aspnet_core_on_k8s_deepstudy_par ...

  6. centos7使用kubeadm搭建kubernetes集群

    一.本地实验环境准备 服务器虚拟机准备 IP CPU 内存 hostname 192.168.222.129 >=2c >=2G master 192.168.222.130 >=2 ...

  7. 使用kubeadm搭建Kubernetes集群

    记录在石墨日记中,经常更新,懒得再复制了,直接点击下面链接查看吧 移步到此: https://shimo.im/docs/22WbxxQa1WUV9wsN/

  8. kubeadm搭建K8s集群及Pod初体验

    基于Kubeadm 搭建K8s集群: 通过上一篇博客,我们已经基本了解了 k8s 的基本概念,也许你现在还是有些模糊,说真的我也是很模糊的.只有不断地操作去熟练,强化自己对他的认知,才能提升境界. 我 ...

  9. Kubernetes(K8s) 安装(使用kubeadm安装Kubernetes集群)

    背景: 由于工作发生了一些变动,很长时间没有写博客了. 概述: 这篇文章是为了介绍使用kubeadm安装Kubernetes集群(可以用于生产级别).使用了Centos 7系统. 一.Centos7 ...

随机推荐

  1. meta标签使用方法总结

    meta标签是用来描述一个HTML网页文档的属性,比如该网页的作者,日期,网页的关键字,刷新,网页等级设定等等,是文档中的最基本的元信息,本文是对meta标签的学习总结,内容大多来自网上各个地方,非原 ...

  2. linux shell脚本调用java main方法 代码传值

    #!/bin/bash #description: ljdjService export PRG_HOME=/ainmc/work/toptea/dataTransfer PRG_KEYWORD=pr ...

  3. Qt Creator中如何选择某个子项目为启动项目

    Qt Creator中的子目录项目类似于Visual Studio中的Solution(解决方案),可以用来管理多个子项目.但是在Qt Creator IDE中由不能像Visual Studio中那样 ...

  4. 深入浅出的webpack构建工具---tree shaking打包性能优化(十二)

    阅读目录 1. 什么是tree-shaking? 2. 在webpack中如何使用 tree-shaking 呢? 3. 使用webpack-deep-scope-plugin 优化 回到顶部 1. ...

  5. java計算年齡的工具類

    整理一篇Java計算年齡的工具類,方便實用 public static int getAgeByBirth(String birthday) throws ParseException { // 格式 ...

  6. Linux/CentOS下安装MySql RPM Bundle

    一.下载对应的版本的MySql安装文件 1.下载路径 https://dev.mysql.com/downloads/mysql/ 2.选择对应的Linux版本和x86/x64位的安装文件 查看Lin ...

  7. 使用Python遇到:'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte 问题

    查看你的HTTP头部是否有如下头部信息:"Accept-Encoding": "gzip, deflate" 这条信息代表本地可以接收压缩格式的数据,而服务器在 ...

  8. EF性能优化-有人说EF性能低,我想说:EF确实不如ADO.NET

    十年河东,十年河西,莫欺少年穷. EF就如同那个少年,ADO.NET则是一位壮年.毕竟ADO.NET出生在EF之前,而EF所走的路属于应用ADO.NET. 也就是说:你所写的LINQ查询,最后还是要转 ...

  9. MGR主从不一致问题排查与修复

    运行环境 linux:CentOS release 6.8 (Final) kernel:2.6.32-642.6.2.el6.x86_64 mysql Server version: 5.7.21- ...

  10. 编写一个供浏览器端使用的NPM包

    此文已由作者吴维伟授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 在编写程序时,总会有一些代码是我们不愿意一遍又一遍重复地去写的,比如一些UI或交互相似组件,或是一些相似的流 ...