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集群的更多相关文章

  1. CentOS部署Kubernetes1.13集群-1(使用kubeadm安装K8S)

    参考:https://www.kubernetes.org.cn/4956.html 1.准备 说明:准备工作需要在集群所有的主机上执行 1.1系统配置 在安装之前,需要先做如下准备.三台CentOS ...

  2. Ubuntu16.04下,rabbimq集群搭建

    rabbitmq作为企业级的消息队列,功能很齐全,既可以作为单一的部署模式,又可以做集群的部署模式 单一部署就不说了,就是在一台服务器上部署rabbitmq消息队列,可以参考我的博客:Ubuntu16 ...

  3. ubuntu16.04安装cuda8.0试错锦集

    ubuntu16.04安装cuda8.0试错锦集 参考文献: [http://www.jianshu.com/p/35c7fde85968] [http://blog.csdn.net/sinat_1 ...

  4. Ubuntu16.04安装Ambari 2.7.3

    概念了解 Ambair介绍 Apache Ambari是一个用于支持大数据软件供应 管理与监控软件.它也是一个分布式软件,分为Ambair-Server与Ambari-Client两个部分.在生产环境 ...

  5. Ubuntu16.04安装K8s步骤和踩坑记录【不错】

    文章目录环境信息安装步骤系统配置修改安装docker安装kubectl,kubelet,kubeadm配置Master配置Node部署结果检查K8S部署mysql学习新建mysql-rc.yaml创建 ...

  6. 使用yum安装CDH Hadoop集群

    使用yum安装CDH Hadoop集群 2013.04.06 Update: 2014.07.21 添加 lzo 的安装 2014.05.20 修改cdh4为cdh5进行安装. 2014.10.22  ...

  7. 使用docker安装部署Spark集群来训练CNN(含Python实例)

    使用docker安装部署Spark集群来训练CNN(含Python实例) http://blog.csdn.net/cyh_24/article/details/49683221 实验室有4台神服务器 ...

  8. kubernetes系列03—kubeadm安装部署K8S集群

    本文收录在容器技术学习系列文章总目录 1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 1.3 安装kubernetes方法 1.3.1 方法1:使用kubeadm ...

  9. Ubuntu 16.04下搭建kubernetes集群环境

    简介 目前Kubernetes为Ubuntu提供的kube-up脚本,不支持15.10以及16.04这两个使用systemd作为init系统的版本. 这里详细介绍一下如何以非Docker方式在Ubun ...

随机推荐

  1. Java 中清空map

    本文链接:https://blog.csdn.net/TsuiXh/article/details/87879004在开发中在使用Map时,如果需要将Map作为临时的数据存储和处理,可以不用每次都去新 ...

  2. 骑行川藏--新都桥&塔公草原

    新都桥 塔公草原 新都桥,位于四川省甘孜藏族自治州康定市西部地区,距市区81公里: 别名:东俄罗,一个镇名.海拔约3300米,没有突出的标志性景观,沿线有10余公里被称为“摄影家走廊”. 神奇光线,无 ...

  3. 【PHP】解决数据库查询出来的中文内容显示为问号“??”

    方法一:在数据库连接后执行: mysql_query('SET NAMES utf8'); 代码: $dbconn=mysql_connect("localhost", " ...

  4. stub 和 skeleton 的讲解,自己实现一个stub和skeleton程序

    转: stub 和 skeleton 的讲解,自己实现一个stub和skeleton程序 RMI的本质就是实现在不同JVM之间的调用,它的实现方法就是在两个JVM中各开一个Stub和Skeleton, ...

  5. 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_13-课程预览功能开发-CMS页面预览接口测试

    5.2 CMS页面预览测试 CMS已经提供了页面预览功能,课程预览功能要使用CMS页面预览接口实现,下边通过cms页面预览接口测试课 程预览的效果. 1.向cms_page表插入一条页面记录或者从cm ...

  6. 算法习题---3.11换抵挡装置(UVa1588)

    一:题目 给你连个长度分别为n1,n2且每列高度只为1或2的长条,然后将他们拼在一起,高度不能超过3,问他们拼在一起的最短长度 二:实现思路 1.获取主动轮和从动轮的数据. 2.主动轮不动,从动轮从左 ...

  7. 【425】堆排序方法(二叉堆)优先队列(PQ)

    参考:漫画:什么是二叉堆? 大根堆 小根堆 参考:漫画:什么是堆排序? 参考:漫画:什么是优先队列? 参考:[video]视频--第14周10--第8章排序10--8.4选择排序3--堆排序2--堆调 ...

  8. 对Mysql数据表本身进行操作

    创建实验环境 mysql> create database test_db; Query OK, 1 row affected (0.00 sec) mysql> use test_db; ...

  9. ansible软件部署

    每一个软件或集群都创建一个单独的角色. mkdir -pv ansible/roles/{jdk,hadoop,spark}/{tasks,files,templates,meta,handlers, ...

  10. application.properties在Spring Boot项目中的位置

    application.properties可以放在如下位置: 当前目录的 "/config"的子目录下 当前目录下 classpath根目录的"/config" ...