Centos7安装k8s集群1.15.0版本
版本说明
- Date: 2019.7.17
- OS:CentOS7
- Docker:18.09.7
- K8S: 1.15.0
安装前说明
使用kubeadm安装k8s,比起以前一个个安装组件,已经非常简单了。只不过因为国内网络问题,google的东西都被墙了,所以感觉安装起来比较费劲。所以安装ks关键在如何拉取镜像,有四个方法法解决:
- 如果有代理,直接给docker配置代理,安装非常顺利
- 如果没有代理,找国内阿里云等仓库,下载镜像,再把镜像的tag改成google的
- 如果有同事或者别的机器已经下载好镜像,使用docker的save和load命令导入
- 直接编译ks源码,打成docker镜像,该方法不适合新手。
github上有一个图形化安装k8s的项目,已经获得CNCF官方认证。 图像界面安装k8s
机器规划
机器名称 |
ip地址 |
角色 |
yum安装的组件 |
---|---|---|---|
k8s-master |
10.1.69.101 |
master |
docker、kubelet、kubeadm、kubectl |
k8s-node1 |
10.1.69.102 |
node |
docker、kubelet、kubeadm |
k8s-node2 |
10.1.69.103 |
node |
docker、kubelet、kubeadm |
友情提示:虚拟机下安装,最好固定ip地址。特别是master节点,因为安装时,需要使用ip地址,且不能用域名。如果下次ip地址变了,可能会导致集群不可用
准备工作
1. 安装必备软件
yum install -y wget vim net-tools epel-release
2. 关闭swap
swapoff -a
# 永久禁用,打开/etc/fstab注释掉swap那一行。
sed -i 's/.*swap.*/#&/' /etc/fstab
3. 关闭selinux
# 临时禁用selinux
setenforce 0
# 永久关闭 修改/etc/sysconfig/selinux文件设置
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
4. 关闭防火墙
systemctl disable firewalld
systemctl stop firewalld
安装Docker和配置代理
1. 配置yum源
## 配置默认源
## 备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
## 下载阿里源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
## 刷新
yum makecache fast
## 配置k8s源
cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
EOF
## 重建yum缓存
yum clean all
yum makecache fast
yum -y update
复制代码
2. 安装docker
yum -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
systemctl enable docker
systemctl start docker
3. 确保kubelet使用的cgroup driver 与 Docker的一致
cat > /etc/docker/daemon.json <复制代码
4. 设置docker代理(核心步骤-如果有代理)
没有代理执行步骤5
mkdir /etc/systemd/system/docker.service.d
touch /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://xxx"
Environment="HTTPS_PROXY=http://xxx"
Environment="NO_PROXY=localhost,127.0.0.1,localaddress,.localdomain.com"
systemctl daemon-reload && systemctl restart docker
5. 从国内仓库拉取镜像(核心步骤-如果没有代理)
## 查看集群初始化所需镜像及对应依赖版本号,列出的就是需要下载的镜像
kubeadm config images list
复制代码
#!/bin/bash
## 使用如下脚本下载国内镜像,并修改tag为google的tag
set -e
KUBE_VERSION=v1.15.0
KUBE_PAUSE_VERSION=3.1
ETCD_VERSION=3.3.10
CORE_DNS_VERSION=1.3.1
GCR_URL=k8s.gcr.io
ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers
images=(kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${CORE_DNS_VERSION})
for imageName in ${images[@]} ; do
docker pull $ALIYUN_URL/$imageName
docker tag $ALIYUN_URL/$imageName $GCR_URL/$imageName
docker rmi $ALIYUN_URL/$imageName
done
6. 配置网络代理(可选)
## 配置/etc/profile文件,特別是https,xxx替换为自己或自己公司的代理地址
http_proxy=xxx
https_proxy=xxx
HTTP_PROXY=xxx
HTTPS_PROXY=xxx
复制代码
开始安装k8s
1. 安装kubeadm,kubelet等
yum -y install kubelet kubeadm kubectl kubernetes-cni
systemctl enable kubelet && systemctl start kubelet
2. 集群初始化
## master节点执行:
sudo kubeadm init
--apiserver-advertise-address 10.1.69.101
--kubernetes-version=v1.15.0
--pod-network-cidr=10.244.0.0/16
复制代码
友情提示:如果镜像没有提前拉取,这一步会比较慢。配置了代理的话,可执行:kubeadm config images pull, 单独拉取镜像
如果是kubeadm reset卸载后再安装,可能报错,加入这个参数:--ignore-preflight-errors=all
得到回复:
(...省略)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
## 保存好该命令,丢了不好找回。节点加入时需要
kubeadm join 10.1.69.101:6443 --token ou5pvo.qseafc4s8licblzy
--discovery-token-ca-cert-hash sha256:de9c10f11c50c074f212698b9d514fc12a9c1c4ffe70961aff89ac5e585f0663
复制代码
3. 拷贝配置,给kubectl使用
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
4. 安装flannel网络
sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
## 查看flannal是否安装成功
sudo kubectl -n kube-system get po -l app=flannel -o wide
复制代码
5. node节点加入集群
其他节点执行:
kubeadm join 10.1.69.101:6443 --token ou5pvo.qseafc4s8licblzy
--discovery-token-ca-cert-hash sha256:de9c10f11c50c074f212698b9d514fc12a9c1c4ffe70961aff89ac5e585f0663
清理安装
- 如果安装过程中出任何问题,可以重置后重新安装
sudo kubeadm reset
Dashboard插件安装
1. 下载插件并配置
- 下载yaml文件到本地 wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
- 配置dashboard界面可以在虚拟机之外访问
- 配置准入控制(否则各种没有权限访问)
- K8S在1.6版本以后启用了RBAC访问控制策略
- vim添加dashboard-rbac.yaml文件,内容如下
apiVersion: v1 kind: ServiceAccount metadata: name: dashboard namespace: kube-system --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: dashboard subjects: - kind: ServiceAccount name: dashboard namespace: kube-system roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io
2. 执行安装
- 开始安装 sudo kubectl apply -f kubenetes-dashboard.yaml sudo kubectl appy -f dashboard-rbac.yaml
- 查看dashboard是否安装成功 ## 下载镜像需要一定时间,看pod处于running表示安装成功 kubectl get pod -n kube-system |grep kubernetes-dashboard 复制代码
3. 登录界面查看
- 用Firefox查看dashboard页面(chrome无法访问不安全的https) 注意:url中地址必须用https!!!
- 进入到输入token界面
- 获取token命令 ## 获取登陆界面token kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token 复制代码
- 进入dashboard首页
- 如果dashboard的token过期,以下脚本重新生成config文件 #!/bin/bash TOKEN=(kubectl -n kube-system describe secret default| awk '1=="token:"{print
遇到的问题
- load导入镜像报错,找不到tmp文件。
save导出的时候没有指定image的tag
- The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled
kubeadm init时,apiserver的地址写错了
- [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
echo "1">/proc/sys/net/bridge/bridge-nf-call-iptables
- NetworkPlugin cni failed to set up pod, network: failed to set bridge addr: "cni0" already has an IP address different from
kubeadm reset, 重置节点,重新加入
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP连续签到功能实现方法详解
- PHP实现发送微博消息功能完整示例
- php实现快速对二维数组某一列进行组装的方法小结
- PHP实现提取多维数组指定一列的方法总结
- PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
- Laravel框架Eloquent ORM简介、模型建立及查询数据操作详解
- Laravel框架下载,安装及路由操作图文详解
- PHP实用小技巧之调用录像的方法
- Laravel重定向,a链接跳转,控制器跳转示例
- Laravel 错误提示本地化的实现
- Laravel框架DB facade数据库操作详解
- laravel 解决强制跳转 https的问题
- 在laravel中实现将查询的对象转换为多维数组的函数
- 在Laravel 中实现是否关注的示例
- Laravel框架查询构造器常见用法总结