阿里云ECS搭建kubernetes1.11
环境信息
说明
1、使用kubeadm安装集群
虚拟机信息
|
hostname |
memory |
cpu |
disk |
role |
|
node1.com |
4G |
2C |
vda20G vdb20G |
master |
|
node1.com |
4G |
2C |
vda20G vdb20G |
node |
其中vda为系统盘,vdb为docker storage,用于存储容器和镜像
配置主机名
#以下在两个节点执行
hostnamectl set-hostname node1.com
hostnamectl set-hostname node2.com
配置阿里云k8s yum repo
#以下在两个节点执行
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=
gpgcheck=
repo_gpgcheck=
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF yum update -y
yum upgrade
yum clean all
yum makecache
安装docker
#在两个节点执行
yum install -y docker
配置docker-storage为deviceMapper
#在两个节点执行
#创建pv
pvcreate /dev/vdb #使用上述创建的pv创建docker-vg
vgcreate docker-vg /dev/vdb #配置docker使用docker-vg作为后端存储
echo VG=docker-vg > /etc/sysconfig/docker-storage-setup
docker-storage-setup #将docker-vg的docker-pool这个lv扩展到100%
lvextend -l %VG /dev/docker-vg/docker-pool #启动docker并设置开机自启
systemctl start docker
systemctl enable docker
安装其他需要的软件
#以下在两个节点执行
yum install -y bridge-utils
关闭防火墙、swap和selinux
#以下在两个节点执行
systemctl stop firewalld && systemctl disable firewalld
swapoff -a
setenforce
各节点配置主机名解析
#在两个节点执行
cat <<EOF >> /etc/hosts
172.31.2.130 node1.com
172.31.2.131 node2.com
EOF
安装kubelet kubeadm kubectl
#以下在master执行
#查看yum repo中kubelet可用的版本
yum list --showduplicates | grep kubelet
#安装 kubelet-1.11. 、kubeadm-1.11. 和kubectl-1.11.1
yum install -y kubelet-1.11.1
yum install -y kubectl-1.11.1
yum install -y kubeadm-1.11.1
由于安装kubeadm会自动安装kubectl、kubelet,安装kubeadm-1.11.1依赖安装的kubectl和kubelet版本并不是1.11.1,而是最新的
(1)可以将非1.11.1的组件通过yum remove再重新安装
(2)按照上述顺序先安装Kubectl-1.11.1和kubelet-1.11.1就没有问题
#查看上述安装是否是对应1.11版本
yum list installed | grep "kubernetes"
正确安装完之后如下所示
#配置kubelet开机启动
systemctl enable kubelet
拉取镜像
以下在master执行
docker pull mirrorgooglecontainers/kube-apiserver-amd64:v1.11.1
docker pull mirrorgooglecontainers/pause-amd64:3.1
docker pull mirrorgooglecontainers/kube-controller-manager-amd64:v1.11.1
docker pull mirrorgooglecontainers/kube-scheduler-amd64:v1.11.1
docker pull mirrorgooglecontainers/kube-proxy-amd64:v1.11.1
docker pull mirrorgooglecontainers/etcd-amd64:3.2.
docker pull coredns/coredns:1.1. docker tag mirrorgooglecontainers/kube-apiserver-amd64:v1.11.1 k8s.gcr.io/kube-apiserver-amd64:v1.11.1
docker tag mirrorgooglecontainers/pause-amd64:3.1 k8s.gcr.io/pause:3.1
docker tag mirrorgooglecontainers/kube-controller-manager-amd64:v1.11.1 k8s.gcr.io/kube-controller-manager-amd64:v1.11.1
docker tag mirrorgooglecontainers/kube-scheduler-amd64:v1.11.1 k8s.gcr.io/kube-scheduler-amd64:v1.11.1
docker tag mirrorgooglecontainers/kube-proxy-amd64:v1.11.1 k8s.gcr.io/kube-proxy-amd64:v1.11.1
docker tag mirrorgooglecontainers/etcd-amd64:3.2. k8s.gcr.io/etcd-amd64:3.2.
docker tag coredns/coredns:1.1. k8s.gcr.io/coredns:1.1.
以下在node执行
docker pull coredns/coredns:1.1.
docker pull mirrorgooglecontainers/pause-amd64:3.1
docker pull mirrorgooglecontainers/kube-proxy-amd64:v1.11.1 docker tag coredns/coredns:1.1. k8s.gcr.io/coredns:1.1.
docker tag mirrorgooglecontainers/pause-amd64:3.1 k8s.gcr.io/pause:3.1
docker tag mirrorgooglecontainers/kube-proxy-amd64:v1.11.1 k8s.gcr.io/kube-proxy-amd64:v1.11.1
使用kubeadm初始化集群
#此处pod-network-cidr地址范围应与下面的flannel yaml中定义的一致
kubeadm init --kubernetes-version=v1.11.1 --pod-network-cidr=10.244.0.0/16 mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
加入计算节点到集群中
以下在需要加入集群的节点中执行
#获取加入集群需要使用的hash值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der >/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' #获取加入集群需要使用的token值
kubeadm token list
#如果上述命令没有token,说明已过期,通过如下命令重新生成
kubeadm token create
#使用kubeadm加入集群 kubeadm join node1.com: --token <token> --discovery-token-ca-cert-hash sha256:<hash> 此时kubectl get nodes如下,因为还没有配置网络插件

配置Flannel网路插件
#新建kube-flannel.yaml文件
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: flannel
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- apiGroups:
- ""
resources:
- nodes
verbs:
- list
- watch
- apiGroups:
- ""
resources:
- nodes/status
verbs:
- patch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: flannel
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: flannel
subjects:
- kind: ServiceAccount
name: flannel
namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: flannel
namespace: kube-system
---
kind: ConfigMap
apiVersion: v1
metadata:
name: kube-flannel-cfg
namespace: kube-system
labels:
tier: node
app: flannel
data:
cni-conf.json: |
{
"name": "cbr0",
"plugins": [
{
"type": "flannel",
"delegate": {
"hairpinMode": true,
"isDefaultGateway": true
}
},
{
"type": "portmap",
"capabilities": {
"portMappings": true
}
}
]
}
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan"
}
}
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: kube-flannel-ds
namespace: kube-system
labels:
tier: node
app: flannel
spec:
template:
metadata:
labels:
tier: node
app: flannel
spec:
hostNetwork: true
nodeSelector:
beta.kubernetes.io/arch: amd64
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
serviceAccountName: flannel
initContainers:
- name: install-cni
image: registry.cn-shanghai.aliyuncs.com/gcr-k8s/flannel:v0.10.0-amd64
command:
- cp
args:
- -f
- /etc/kube-flannel/cni-conf.json
- /etc/cni/net.d/-flannel.conflist
volumeMounts:
- name: cni
mountPath: /etc/cni/net.d
- name: flannel-cfg
mountPath: /etc/kube-flannel/
containers:
- name: kube-flannel
image: registry.cn-shanghai.aliyuncs.com/gcr-k8s/flannel:v0.10.0-amd64
command:
- /opt/bin/flanneld
args:
- --ip-masq
- --kube-subnet-mgr
- --iface=eth0
resources:
requests:
cpu: "100m"
memory: "50Mi"
limits:
cpu: "100m"
memory: "50Mi"
securityContext:
privileged: true
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
volumeMounts:
- name: run
mountPath: /run
- name: flannel-cfg
mountPath: /etc/kube-flannel/
volumes:
- name: run
hostPath:
path: /run
- name: cni
hostPath:
path: /etc/cni/net.d
- name: flannel-cfg
configMap:
name: kube-flannel-cfg
#使用kubectl创建kube-flannel ds
kubectl apply -f kube-flannel.yaml
#部署完成查看flannel pod和节点的状态
部署测试应用
#部署nginx deployment
kubectl create -f https://kubernetes.io/docs/user-guide/nginx-deployment.yaml #expose deployment,类型为NodePort
kubectl expose deployment nginx-deployment --type=NodePort
设置master参与调度
#取消master节点的taints污点属性
kubectl taint node node1.com node-role.kubernetes.io/master-
安装过程中遇到的问题
1、kubectl kubelet kubeadm的版本不一致导致安装失败
#通过一条命令yum install -y kubectl-1.11. kubelet-1.11. kubeadm-1.11. 报依赖问题无法安装
#需要通过逐一使用yum进行安装
yum install -y kubelet-1.11.
yum install -y kubectl-1.11.
yum install -y kubeadm-1.11.1 #逐一安装之后,通过以下命令发现版本不是1.11.1
yum list installed | grep "kubernetes" #将不是1.11.1版本的remove之后,重新install即可
#原因可能是yum install kubeadm-1.11.1时会附带安装高版本的kubelet 和 kubectl
2、flannel pod启动失败,CrashLoopBackOff,通过kubectl logs {pod_name}如下
I0815 ::37.646559 main.go:] Could not find valid interface matching ens32: error looking up interface ens32: route ip+net: no such network interface
E0815 ::37.646628 main.go:] Failed to find interface to use that matches the interfaces and/or regexes provided
需要查看虚拟机的网卡名称,如下,为eth0,并与flannel pod的yaml文件中--iface=eth0 arg保持一致

3、部署nginx后,无法通过公网ip:nodePort访问
需要在阿里云控制台中为对应的实例配置安全组规则:开放30000-32767端口
4、docker-storage出现问题时可以通过如下方式重置docker-storage
#重置docker-storage
rm -rf /etc/sysconfig/docker-storage
rm -rf /var/lib/docker
#报如下错误
rm: cannot remove ‘/var/lib/docker/devicemapper’: Device or resource busy
rm: cannot remove ‘/var/lib/docker/containers’: Device or resource busy #通过
umount /var/lib/docker/devicemapper
umount /var/lib/docker/containers
#即可删除/var/lib/docker目录 docker-storage-setup --reset
#配置docker使用docker-vg作为后端存储
echo VG=docker-vg > /etc/sysconfig/docker-storage-setup
docker-storage-setup
阿里云ECS搭建kubernetes1.11的更多相关文章
- 阿里云ECS搭建SVN配置外网
阿里云ECS搭建SVN后,配置外网启动不了,检查云服务器没发现问题,后来发现是阿里云拦截,需要在阿里云控制台ECS安全组新增如下配置:
- 在阿里云 ECS 搭建 nginx https nodejs 环境(三、nodejs)
在阿里云 ECS 搭建 nginx https nodejs 环境(三.nodejs) 在阿里云 ECS 搭建 nginx https nodejs 环境(三.nodejs) 第一步 指定版本源 执行 ...
- 在阿里云 ECS 搭建 nginx https nodejs 环境(二、https)
在阿里云 ECS 搭建 nginx https nodejs 环境(二) 这次主要内容是 如何在 ubuntu 的nginx 下配置 二级域名. 一. 域名解析 首先你需要去到你的 域名服务商那边 进 ...
- 阿里云上安装mysql步骤/ 阿里云ECS搭建Java+mysql+tomcat环境
使用阿里云ECS挺长一段时间了.这两天碰巧朋友小白让我一步一步教他在ECS上搭建Java+mysql+tomcat环境,所以把在这里把步骤在这简单整理了一下,以便需要的人查阅. 我购买的阿里云服务器系 ...
- 阿里云ECS搭建开源跳板机jumpserver无法获取验证邮件的问题及解决办法
这段时间自己在阿里云上搭建了jumpserver3.0,在安装过程中需要输入邮箱smtp地址,输入之后会有一封验证邮件的,但是在阿里云ECS服务器上却无法收到邮件.查阅了阿里云官方的说明: 为什么无法 ...
- 在阿里云 ECS 搭建 nginx https nodejs 环境 (一、 nginx)
首先介绍下相关环境.软件的版本 1.阿里云 ECS . ubuntu-14.04.5 LTS 2.nginx 版本 1.9.2 可能会遇到的问题: 一.在 ssh 服务器上的时候,提示 这个时候需要将 ...
- 手把手教你如何在阿里云ECS搭建Python TensorFlow Jupyter
前段时间在阿里云买了一台服务器,准备部署网站,近期想玩一些深度学习项目,正好拿来用.TensorFlow官网的安装仅提及Ubuntu,但我的ECS操作系统是 CentOS 7.6 64位,搭建Pyth ...
- centos(Linux)系统阿里云ECS搭建 jdk,tomcat和MySQL环境,并部署web程序
之前我对这个东西一无所知,攻击力为0,谢谢各个论坛上面的兄弟们的帮助. 过程: 首先ssh远程登陆: ssh root@你的公网ip ,输入密码 1,jdk我用的版本是jdk-7u80-linux-x ...
- 阿里云ECS搭建node/mongodb开发环境及部署
一.前端的er在window或mac上安装开发环境应该再清楚不过了.但在服务器上安装还是有点不同的,毕竟是 centOS,从此不得不走上用命令操作…… 二.前期准备 1.首先,我们去阿里云网站阿里云服 ...
随机推荐
- MacOs mysql 安装
1. 去官网下载mysql镜像:https://dev.mysql.com/downloads/file/?id=475582 2. 双击镜像文件 - > 双击.pkg文件 -> 出现 ...
- 阿里云和微软共同开源的 OAM 对 Kubernetes 开发人员意味着什么?
上周,微软和阿里巴巴共同推出了开放应用模型(OAM),用于定义部署在任何地方的应用模型的一种规范.Rudr是Microsoft基于Kubernetes环境的OAM标准实现. 我用了一个周末来了解OAM ...
- shell 脚本中的注释详解
上次写了shell脚本的注释,没想到那么多人的需要,也存在不少不足.这次做个补充吧. 单行注释: 单行注释就比较简单了,直接在行最前端加上符号 # 即可.具体用法如下所示: # this is com ...
- Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException 异常
Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException 报此异常是应为有相同的bean ...
- Java自动化测试框架-09 - TestNG之依赖注入篇 (详细教程)
1.-依赖注入 TestNG支持两种不同类型的依赖项注入:本机(由TestNG本身执行)和外部(由诸如Guice的依赖项注入框架执行). 1.1-本机依赖项注入 TestNG允许您在方法中声明其他参数 ...
- 【XSY1986】【BZOJ1455】罗马游戏
就是一模板题. 合并就直接merge. pop就是将自己的值设为一,再将自己的左右儿子合并即可. 查询直接找到堆顶,输出. 模板左偏树 代码: #include<bits/stdc++.h> ...
- 学习笔记_58 python语法基础
1.python是解析型语言. 有点像javaScript在html运行一样,不需要mian函数入口,随时随地定义函数,执行函数, 执行语句,定义类型 2.python能面向对象 3.python使用 ...
- [考试反思]1013csp-s模拟测试71:徘徊
分差好大...但是从排名上看也许还可以接受? 不算太炸 但是这个还是算了吧... 其实状态不是很好. T1不会,打的搜索,想到一个剪枝但是感觉没什么用,所以没打. 考后打上,85了...打上另一个就9 ...
- [考试反思]1008csp-s模拟测试64:契机
暴力没打满...有点垃圾... 考得稍绝望,啥也不会啊??? T3的测试点分治还写挂了... 其实就是没有沉下心好好的思考,在三道题上来回切换结果一个成型思路都没有 T2既然已经想到那一步了居然没有继 ...
- CSPS模拟 81
Z哥的题,真是见题如见人啊.. T1 实际状态数没有那么多,不要被数字吓倒就是了. 另外为什么吧轮廓线给忘了啊 T3 觉得自己是正解但是被hack了? 考试的时候想到了复杂度对的的解法,但是 spfa ...


