Ubuntu16.04安装kubernetes1.13集群
Ubuntu16.04安装kubernetes1.13集群
最新的安装可以使用以下方式:https://www.cnrancher.com/docs/rancher/v2.x/cn/overview/quick-start-guide
方便,快捷!

以下为正文。
前言
Docker容器化,虚拟化技术上的又一个猛将,可以极高提高软件部署的速度。运行一个Docker容器,这个容器作为一个进程分配了计算资源,不同容器之间资源隔离,仿佛每个容器都是一台机器,
并且通过宿主机网桥,可以模拟一个局域网。可以参考: 新手教程
Docker-compose可以管理单机上的容器们,但是多机管理还做不到,目前Kubernetes容器编排是最好的解决方案,可实现多机的容器编排。
Kubernetes简称为k8s,它是 Google 开源的容器集群管理系统。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
k8s因为种种原因,在中国很难安装得上,毕竟网不好。通过搭建k8s,我们也算追得上潮流。我们准备安装最新的k8s1.13。
准备工作
我们可以通过:VMware Workstation多台虚拟机安装 新建三台Ubuntu16.04机器:
三台机器的主机名和IP:
ubuntu1:192.168.152.3 4G内存 20G硬盘 必须2CPU核
ubuntu2:192.168.152.4 2G内存 20G硬盘
ubuntu3:192.168.152.5 2G内存 20G硬盘
我们必须永久关闭swap空间:
先vim /etc/fstab加#注释掉所有swap分区,然后重启三台机器!
安装k8s集群
以下的命令都是用root用户进行。
安装Docker
在每台机器上运行Docker官方的安装脚本:
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh --mirror Aliyun
安装kubelet kubeadm kubectl
在4G内存的ubuntu1机器上,更换阿里源,并安装kubelet kubeadm kubectl:
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
使用kubeadm创建一个集群
1.13.0 版本提供了中国特供的一个功能,可以解决以前镜像被墙的问题。
kubeadm init \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=192.167.0.0/16 \
--ignore-preflight-errors=cri \
--kubernetes-version=1.13.1
镜像从registry.aliyuncs.com/google_containers阿里云处下载,且pod的网段改为192.167.0.0/16(怕虚拟机与外部网络冲突了)。
耐心等待后出现:
Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
You can now join any number of machines by running the following on each node
as root:
kubeadm join 192.168.152.3:6443 --token to697t.fdu5pffmr0862z8g --discovery-token-ca-cert-hash sha256:15da0d9ac768ad5fe546a2b93ed7516222fa043ef9d5e454a72e1f2ca4870862
上面的kubeadm join 192.168.152.3:6443 --token to697t.fdu5pffmr0862z8g --discovery-token-ca-cert-hash sha256:15da0d9ac768ad5fe546a2b93ed7516222fa043ef9d5e454a72e1f2ca4870862请记住。
然后你可以用普通用户,或者root用户:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
这样你就可以使用该用户操作k8s集群了。
我们可以使用kubectl get命令来查看当前唯一一个节点的状态:
root@ubuntu1:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
ubuntu1 NotReady master 2m59s v1.13.2
我们可以使用kubectl describe查看这个节点(Node)对象的详细信息、状态和事件(Event)信息:
root@ubuntu1:~# kubectl describe node ubuntu1
Name: ubuntu1
Roles: master
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
kubernetes.io/hostname=ubuntu1
node-role.kubernetes.io/master=
Annotations: kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
node.alpha.kubernetes.io/ttl: 0
volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp: Fri, 18 Jan 2019 10:34:29 +0800
Taints: node-role.kubernetes.io/master:NoSchedule
node.kubernetes.io/not-ready:NoSchedule
Unschedulable: false
Conditions:
Type Status LastHeartbeatTime LastTransitionTime Reason Message
---- ------ ----------------- ------------------ ------ -------
MemoryPressure False Fri, 18 Jan 2019 10:39:19 +0800 Fri, 18 Jan 2019 10:34:29 +0800 KubeletHasSufficientMemory kubelet has sufficient memory available
DiskPressure False Fri, 18 Jan 2019 10:39:19 +0800 Fri, 18 Jan 2019 10:34:29 +0800 KubeletHasNoDiskPressure kubelet has no disk pressure
PIDPressure False Fri, 18 Jan 2019 10:39:19 +0800 Fri, 18 Jan 2019 10:34:29 +0800 KubeletHasSufficientPID kubelet has sufficient PID available
Ready False Fri, 18 Jan 2019 10:39:19 +0800 Fri, 18 Jan 2019 10:34:29 +0800 KubeletNotReady runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
我们知道NotReady的原因是:
Ready False Fri, 18 Jan 2019 10:39:19 +0800 Fri, 18 Jan 2019 10:34:29 +0800 KubeletNotReady runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
因为我们尚未部署任何网络插件。
我们还可以通过kubectl检查这个节点上各个系统Pod的状态,其中kube-system是k8s项目预留的系统Pod的工作空间:
root@ubuntu1:~# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-78d4cf999f-7k9bv 0/1 ContainerCreating 0 7m6s
coredns-78d4cf999f-mtz4b 0/1 ContainerCreating 0 7m6s
etcd-ubuntu1 1/1 Running 0 6m16s
kube-apiserver-ubuntu1 1/1 Running 0 6m35s
kube-controller-manager-ubuntu1 1/1 Running 0 6m7s
kube-proxy-26mzm 1/1 Running 0 7m6s
kube-scheduler-ubuntu1 1/1 Running 0 6m31s
有些失败了,因为我们尚未部署任何网络插件。
默认情况下 Master 节点是不允许运行用户 Pod 的,而 Kubernetes 做到这一点,依靠的是 是 Kubernetes 的 Taint/Toleration 机制。一旦某个节点被加上了一个 Taint,即被“打上了污点”那么所有 Pod 就都不能在这个节点上运行,因为 Kubernetes 的 Pod 都有“洁癖”。
root@ubuntu1:~# kubectl describe node ubuntu1
Name: ubuntu1
Roles: master
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
kubernetes.io/hostname=ubuntu1
node-role.kubernetes.io/master=
Annotations: kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
node.alpha.kubernetes.io/ttl: 0
volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp: Fri, 18 Jan 2019 10:34:29 +0800
Taints: node-role.kubernetes.io/master:NoSchedule
可以看到Taints: node-role.kubernetes.io/master:NoSchedule,我们去掉这个污点,一个单节点的集群就创建成功了,听起来十分有趣,单节点的集群。
我们现在执行:
kubectl taint nodes --all node-role.kubernetes.io/master-
这个步骤的配置最终使Master节点能允许运行用户pod,也是确保下面插件部署能正确运行。
到了这一步,一个基本完整的 Kubernetes 集群就完毕了!! 撒花,感谢之前写教程的大哥哥~~~~
部署插件
我们要安装一些插件来辅助k8s。
部署网络组件
直接运行安装命令:
# 安装
kubectl apply -f https://git.io/weave-kube-1.6
# 删除
kubectl delete -f https://git.io/weave-kube-1.6
查看pod是否部署成功:
kubectl get pods -n kube-system
部署容器存储插件
# 安装
kubectl apply -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/operator.yaml
kubectl apply -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/cluster.yaml
# 删除
kubectl delete -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/operator.yaml
kubectl delete -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/cluster.yaml
# 查看安装情况
kubectl get pods -n rook-ceph-system
kubectl get pods -n rook-ceph
工作节点加入master
在另外两台ubuntu上安装kubeadm, kubelet and kubectl:
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
然后输入:
kubeadm join 192.168.152.3:6443 --token to697t.fdu5pffmr0862z8g --discovery-token-ca-cert-hash sha256:15da0d9ac768ad5fe546a2b93ed7516222fa043ef9d5e454a72e1f2ca4870862
这时候回到master节点服务器,运行下面命令查看节点状态:
kubectl get nodes
如果发现
root@ubuntu1:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
ubuntu1 Ready master 73m v1.13.2
ubuntu2 NotReady <none> 11m v1.13.2
ubuntu3 NotReady <none> 32s v1.13.2
可以在NotReady节点用:
journalctl -f -u kubelet
查看原因,有时候因为网络不稳定,所以会一直重试。
如果我们忘记了Master节点的加入token,可以使用如下命令来查看:
kubeadm token list
默认情况下,token的有效期是24小时,如果我们的token已经过期的话,可以使用以下命令重新生成:
kubeadm token create
如果我们也没有–discovery-token-ca-cert-hash的值,可以使用以下命令生成:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
这样集群就搭好了,接下来我们来使用。
k8s使用
我们进入实践篇。可学习k8s文档。
1.获取命名空间下的POD:
kubectl get pod -n kube-system
2.获取所有命名空间下的POD:
kubectl get pods --all-namespaces
3.查看POD日志:
kubectl logs -f --tail=20 kubernetes-dashboard-57df4db6b-m9zbq -n kube-system
查看命名空间kube-system下的kubernetes-dashboard-57df4db6b-m9zbq日志。
4.查看命名空间下的服务:
kubectl get svc -n kube-system
此篇参考: 俊先生的文章
Ubuntu16.04安装kubernetes1.13集群的更多相关文章
- CentOS部署Kubernetes1.13集群-1(使用kubeadm安装K8S)
参考:https://www.kubernetes.org.cn/4956.html 1.准备 说明:准备工作需要在集群所有的主机上执行 1.1系统配置 在安装之前,需要先做如下准备.三台CentOS ...
- Ubuntu16.04下,rabbimq集群搭建
rabbitmq作为企业级的消息队列,功能很齐全,既可以作为单一的部署模式,又可以做集群的部署模式 单一部署就不说了,就是在一台服务器上部署rabbitmq消息队列,可以参考我的博客:Ubuntu16 ...
- ubuntu16.04安装cuda8.0试错锦集
ubuntu16.04安装cuda8.0试错锦集 参考文献: [http://www.jianshu.com/p/35c7fde85968] [http://blog.csdn.net/sinat_1 ...
- Ubuntu16.04安装Ambari 2.7.3
概念了解 Ambair介绍 Apache Ambari是一个用于支持大数据软件供应 管理与监控软件.它也是一个分布式软件,分为Ambair-Server与Ambari-Client两个部分.在生产环境 ...
- Ubuntu16.04安装K8s步骤和踩坑记录【不错】
文章目录环境信息安装步骤系统配置修改安装docker安装kubectl,kubelet,kubeadm配置Master配置Node部署结果检查K8S部署mysql学习新建mysql-rc.yaml创建 ...
- 使用yum安装CDH Hadoop集群
使用yum安装CDH Hadoop集群 2013.04.06 Update: 2014.07.21 添加 lzo 的安装 2014.05.20 修改cdh4为cdh5进行安装. 2014.10.22 ...
- 使用docker安装部署Spark集群来训练CNN(含Python实例)
使用docker安装部署Spark集群来训练CNN(含Python实例) http://blog.csdn.net/cyh_24/article/details/49683221 实验室有4台神服务器 ...
- kubernetes系列03—kubeadm安装部署K8S集群
本文收录在容器技术学习系列文章总目录 1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 1.3 安装kubernetes方法 1.3.1 方法1:使用kubeadm ...
- Ubuntu 16.04下搭建kubernetes集群环境
简介 目前Kubernetes为Ubuntu提供的kube-up脚本,不支持15.10以及16.04这两个使用systemd作为init系统的版本. 这里详细介绍一下如何以非Docker方式在Ubun ...
随机推荐
- arcgis python 刷新
arcpy.RefreshActiveView() 刷新地图和布局窗口 arcpy.RefreshTOC() 刷新内容列表 arcpy.RefreshCatalog(r"F:\tknew10 ...
- Python网络爬虫学习手记(1)——爬虫基础
1.爬虫基本概念 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.--------百度百科 简单的说,爬 ...
- Android 摇一摇监听实现
package com.loaderman.androiddemo; import android.content.Context; import android.hardware.Sensor; i ...
- linux/videodev.h: No such file or directory错误解决方法
sudo apt-get install libv4l-dev* file yum install libv4l-dev* yum install libv4l-dev* 上面错误的问题是两个2.4以 ...
- osg 在场景中绘制坐标轴(xyz)
//x y z font_size osg::Geode* makeCoordinate(float a_x,float a_y,float a_z,float font_size) { osg::r ...
- 对Mysql数据表本身进行操作
创建实验环境 mysql> create database test_db; Query OK, 1 row affected (0.00 sec) mysql> use test_db; ...
- mysql逻辑备份mydumper
mydumper是一个针对MySQL的高性能多线程备份和恢复工具,它提供了并发备份功能,备份效率有很大提高. 安装mydumper yum安装 # rpm -ivh https://github. ...
- MySQL必知必会:组合查询(Union)
MySQL必知必会:组合查询(Union) php mysqlsql 阅读约 8 分钟 本篇文章主要介绍使用Union操作符将多个SELECT查询组合成一个结果集.本文参考<Mysql ...
- 微信服务号一些记录,与DTCMS微信功能二次开发
1.首先必须获得Token CRMComm crm = new CRMComm(); string error = ""; string ...
- 用MOQ来Mock静态方法的 2种方法(含Moq和Fakes的配合使用)
Moq是无法直接模拟静态方法的,解决方式有两种: 1.需要修改正式代码,在源代码中建一个新的方法把静态方法包起来,调用的时候源代码调用时调用新方法而不是原来的静态方法. 在测试的时候,Mock掉这个新 ...