Docker从入门到掉坑(四) 国内搭建k8s避坑指南

简介: Docker从入门到掉坑(四) 国内搭建k8s避坑指南

在之前的几篇文章中,主要还是讲解了关于简单的docker容器该如何进行管理和操作,在接下来的这篇文章开始,我们将开始进入对于k8s模块的学习


在进行对k8s的学习之前,我们首先来进行几个知识点的回顾:


什么是容器?


通俗易懂地来讲,容器是一系列相互隔离的进程。它们自身具备有轻量操作系统层面的虚拟化技术,每个容器都有着自己的PID,User,UTS,和传统的虚拟机相比,容器技术更加地轻便,带来的损耗也更加小。


docker自身具有哪些特点?


docker有着一次构建,到处运行的特点。其本身是通过cgroup来进行信息内存监控的,并且通过namespace来实现进程的隔离。简单地来说namespace就是一种Linux内部提供的用于隔离环境的技术,cgroup最早是由google内部的工程师发起的,该技术可以更好的将一些共享的系统资源分配给指定的进程使用。所以说实际上docker只是个除了使用了go语言以外,其他都比较旧的东西。


随着技术的不断发展,原先简单的容器技术也开始面对着不一样的全新挑战。例如说:跨机器的部署, 资源的调度,各个不同的容器进行负载均衡等问题都开始逐渐引发了工程师们的思考。


常见的编排工具


我们前一篇文章中有提到一种叫做docker compose的技术,这种技术确实解决了多个容器之间相互依赖,手动启动容器的繁琐问题。市面上比较成熟的容器编排平台有Kubernetes和Docker Swarm两类平台,前者是由google公司进行研发的,后者则是由Docker公司自身进行开发的。本文我们主要还是围绕k8s来进行讲解。


相信对于k8s感兴趣的朋友,应该有去网上搜过一些安装k8s的文章,但是其中大多数都被所谓的 “梯子” 给卡死了。笔者也是在网上搜刮了大量的资料,踩扁了许多坑,才将下边的内容帮大家进行了汇总,希望下边的内容对你有帮助。


由于k8s集群搭建的机器成本过高,官方提供了一个叫做 Minikube 的东西,供初学者入门学习。笔者之前试过通过美国的服务器来搭建minikube,但是这样的教程对于国内大多数的开发者来说实用性并不高。后来将源地址切换为了阿里云的源地址,发现难度会降低很多,不得不说阿里云还是很良心的。


环境准备:


一台centos7的虚拟机 或者 云主机,建议cpu至少为2核,内存大于2gb,并且网络通畅。


安装docker环境


对于docker环境的安装我在这里还是列出来比较好,minikube对于docker依赖的版本其实是有匹配的,过高的docker的版本环境中反而会导致minikube的安装失败。这里我采用了 docker-ce 17.12.0 版本


相关的安装指令如下:


#移除原先的docker安装包
yum remove docker  docker-common docker-selinux docker-engine
#安装必备的插件
yum install -y yum-utils device-mapper-persistent-data lvm2
#设置docker的安装源头
#查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
#安装指定版本的docker
yum install docker-ce-17.12.0.ce
#启动docker,并设置为开机自启动
systemctl start docker
systemctl enable docker
#最后验证docker版本
docker version
复制代码


下载kubectl


这个时候我们的docker环境就已经安装完毕了,那么接下来我们便开始进入kubectl的安装了。kubectl是啥?通俗易懂地来理解,这个东西就是一个管理k8s集群的命令发送工具,没有kubectl 我们没法对集群进行各种管理,所以接下来我们需要对它进行安装。

首先是下载kubectl,阿里源的,国内开发者优先考虑:


curl -Lo kubectl    http://kubernetes.oss-cn-hangzhou.aliyuncs.com/kubernetes-release/release/v1.16.0/bin/linux/amd64/kubectl
复制代码


接着我们将其cp到/user/local/bin目录下边,并且进行授权:


cp kubectl /usr/local/bin
chmod +x kubectl
复制代码


验证kubectl的方式:


kubectl version
复制代码


在确认kubectl安装完成之后,会看到这样的界面:


网络异常,图片无法展示
|


minikube的下载和启动


下载

ps:这里我所采用的minikube版本为1.4.0


curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.4.0/minikube-linux-amd64
chmod +x minikube
cp minikube /usr/local/bin
复制代码


启动


minikube start --vm-driver=none 
复制代码


这里安装的过程可能会比较久,笔者当时大概等待了30分钟



ps:文章开头我提到过centos机器最好内存在2g以上,并且cpu内核数至少为2,否则启动的时候可能会报下边这种错误:

cpu数量不足异常


开启服务期间可能遇到的问题:


下边分享几个我在启动过程中遇到的问题:


[ERROR NumCPU]: the number of available CPUs 1 is less than the required 2
复制代码


这个异常我曾经在github上边搜到过解决方式,通过添加–extra-config=kubeadm.ignore-preflight-errors=NumCPU --cpus 1命令的形式来解决,但是我试了下再不同版本的minikube上边这条命令所带来的效果并不一样,如果对你有帮助的话,可以尝试一下,完整命令如下:


minikube start --vm-driver=none  --extra-config=kubeadm.ignore-preflight-errors=NumCPU --cpus 1
复制代码


起初我在一台内存只有0.5g的机器上边启动minikube,结果报出了内存不足异常,核心描述如下:


k8s cannot allocate memory
复制代码


关于这种异常唯一的解决方式就是加内存了。


minikube和docker的版本不匹配问题:


Docker 18.09: [ERROR SystemVerification]: unsupported docker version: 18.09.0 
复制代码


我在一开始的时候采用了过高版本的docker,导致后边安装minikube的时候出现异常。

当安装完成之后,你会看到这样的界面:


网络异常,图片无法展示
|


安装完成之后,我们可以通过命令来查看minikube是否运作成功


[root@localhost k8s]# minikube status
host: Running
kubelet: Running
apiserver: Running
kubectl: Correctly Configured: pointing to minikube-vm at 10.1.10.51
复制代码


使用minikube启动一个tomcat容器


kubectl create deployment tomcat --image=tomcat:8.0
 kubectl expose deployment tomcat --type=NodePort --port=8080
 minikube service tomcat 
复制代码


启动tomcat服务成功之后,你可能会看到这样的信息:


网络异常,图片无法展示
|


然后我们通过访问这里的url路径进行测试:


网络异常,图片无法展示
|


ok访问成功了。


如果你到达了这一步,一切都还顺利的话,那么恭喜你,minikube的基本环境已经安装成功了,下边就只需要参考着官方文档进行对k8s的一步步学习了。


在下一篇文章里面,我会开始对k8s的各种命令,功能,结构进行讲解。


写在文末


在上一篇的文章底部留言区,看到了一些网友的提问,我在这里进行统一回复一下:

@BC 读者的提问:


对于不同机器中的环境配置问题,可以在不同的机器上边设置一个环境变量值,例如说生产的机器,就定义一个变量:export ENV=prod


然后在dockerfile文件中引用环境变量的值,判断读取不同的配置,从而使得部署的机器能够自动识别读取不同的配置参数。


@忘忘不念。读者的提问:


关于docker pull超时的问题,通常的原因在于拉去镜像的地址有异常。docker一般都是往官方的Docker Hub中拉去镜像,通常拉去并不能成功,而且速度比较慢,建议可以给Docker配置一个国内的镜像源,例如说DaoCloud,使用的方法如下:


修改我们的 etc/default/docker文件配置:


DOCKER_OPTS="--registry-mirror=http://aad0405c.m.daocloud.io"
复制代码


使用service docker restart重启Docker服务即可。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
3月前
|
运维 Kubernetes 开发者
解锁现代开发与部署:Docker入门指南
解锁现代开发与部署:Docker入门指南
194 100
|
1月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
4月前
|
NoSQL 安全 Redis
Docker Compose :从入门到企业级部署
Docker Compose 是用于定义和运行多容器应用的工具,支持服务、网络和卷三大核心要素。通过简洁的 YAML 文件,可实现应用的快速部署与管理,适用于开发、测试及生产环境。
369 1
|
8月前
|
Kubernetes Docker 容器
Kubernetes与Docker参数对照:理解Pod中的command、args与Dockerfile中的CMD、ENTRYPOINT。
需要明确的是,理解这些都需要对Docker和Kubernetes有一定深度的理解,才能把握二者的区别和联系。虽然它们都是容器技术的二个重要组成部分,但各有其特性和适用场景,理解它们的本质和工作方式,才能更好的使用这些工具,将各自的优点整合到生产环境中,实现软件的快速开发和部署。
313 25
|
8月前
|
Ubuntu Linux Docker
Docker 入门全攻略:安装、操作与常用命令指南
Docker 的世界非常广阔,这只是一个开始,请继续探索和学习 Docker 的高级特性和最佳实践。后续也会继续更新相关的理论与实践内容。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
11月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
446 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
11月前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
1259 19
|
10月前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
2652 11
|
1月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
223 1
|
1月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
223 89

热门文章

最新文章

下一篇
oss云网关配置