k8s之基本环境准备
创始人
2024-05-04 08:11:41
0

写在前面

本文看下学习k8s需要的基础环境,包括运行环境,docker等。

1:准备linux运行环境

环境:win10

虚拟化工具:VMware-workstation-full-15.1.0

linux:[ubuntu-22.04.1-desktop-amd64.iso](https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/22.04/ubuntu
-22.04.1-desktop-amd64.iso) 。

安装完毕后我们开始准备其它环境。

2:安装docker环境

安装:

sudo apt install docker.io

安装后验证:

dongyunqi@dongyunqi-virtual-machine:/etc/docker$ docker version
Client:Version:           20.10.12...

镜像下载加速:

dongyunqi@dongyunqi-virtual-machine:/etc/docker$ sudo touch daemon.json
[sudo] password for dongyunqi: 
dongyunqi@dongyunqi-virtual-machine:/etc/docker$ sudo tee /etc/docker/daemon.json <<-'EOF'
> {
>   "registry-mirrors": ["https://8csof3cn.mirror.aliyuncs.com"]
> }
> EOF
{"registry-mirrors": ["https://8csof3cn.mirror.aliyuncs.com"]
}

3:运行镜像

Last login: Sat Dec 31 15:15:57 2022 from 192.168.64.1
dongyunqi@dongyunqi-virtual-machine:~$ docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
2db29710123e: Pull complete 
Digest: sha256:c77be1d3a47d0caf71a82dd893ee61ce01f32fc758031a6ec4cf1389248bb833
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
dongyunqi@dongyunqi-virtual-machine:~$ docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    feb5d9fea6a5   15 months ago   13.3kB
dongyunqi@dongyunqi-virtual-machine:~$ docker run hello-worldHello from Docker!
This message shows that your installation appears to be working correctly.To generate this message, Docker took the following steps:1. The Docker client contacted the Docker daemon.2. The Docker daemon pulled the "hello-world" image from the Docker Hub.(amd64)3. The Docker daemon created a new container from that image which runs theexecutable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent itto your terminal.To try something more ambitious, you can run an Ubuntu container with:$ docker run -it ubuntu bashShare images, automate workflows, and more with a free Docker ID:https://hub.docker.com/For more examples and ideas, visit:https://docs.docker.com/get-started/

上面运行hello-world的输出说明其实就是docker的工作过程和原理,如下图:

在这里插入图片描述

4:其它

4.1:docker虚拟化的原理

容器的本质就是隔离运行的进程,所以其就是一个进程,但是是隔离的,那么是如何实现隔离呢?docker并没有实现什么新的技术,而是基于Linux现有的技术实现的,分别是namespace,cgroup,chroot,分别如下:

namespace:创建独立文件系统,主机名,网络,即可以创建独立于主机硬件的独立硬件系统(这样隔离就实现了)。
cgroup:实现对进程的资源使用限制,如限制指定的CPU资源,内存资源等(这样资源限制就实现了)。
chroot:更改进程根目录,即限制可以访问的目录,只访问通过namespae创建的独立文件系统(这样就拥有了能访问且只能访问的独立文件系统)。

4.2:tag命令规范

格式名字:标签,名字表明了应用的身份,比如 busybox、Alpine、Nginx、Redis 等等。标签(tag)则可以理解成是为了区分不同版本的应用而做的额外标记,任何字符串都可以,比如 3.15 是纯数字的版本号、jammy 是项目代号、1.21-alpine 是版本号加操作系统名等等。其中有一个比较特殊的标签叫“latest”,它是默认的标签,如果只提供名字没有附带标签,那么就会使用这个默认的“latest”标签。如下:

docker pull alpine:3.15
docker pull ubuntu:jammy
docker pull nginx:1.21-alpine
docker pull nginx:alpine
docker pull redis

在这里插入图片描述

上述的ImageID是镜像唯一标识,通过SHA256(镜像文件),获得的64字节长度字符串,之类是以16进制形式标识。

4.3:镜像的结构

假设我们现在都基于Ubuntu的基础镜像来生成新的镜像,进行了如下3个操作:

1:拷贝jdk,可运行jar包到镜像中,并设置相关的环境变量,这样就构成一个新的镜像A
2:拷贝一个编译后的VUE项目到镜像中,并设置VUE相关的环境变量,这样就构成一个新的镜像B
3:拷贝Nginx相关文件到镜像中,并设置Nginx相关的参数,这样就构成了一个新的镜像C

此时我们就有了3个镜像,分别是镜像A,镜像B,镜像C,分别包含了公共的Ubuntu文件系统和自己特有的文件,如果是我们将公共的Ubuntu文件系统在每个镜像中都包含一份的话,就会造成磁盘空间的浪费,也会给网络传输等操作带来额外消耗,基于此,docker选择了将公共中的部分抽取出来,并进行共享的方式,这种方式就叫做层Layer,我们的场景中可能如下图:

在这里插入图片描述

当然实际的是一个多层依赖的过程,A依赖B,B依赖C,C依赖D。最上层是可写的,其依赖的其它层都是只读的,如下图:

在这里插入图片描述

我们可以通过docker inspect查看:

dongyunqi@dongyunqi-virtual-machine:~$ docker inspect nginx:alpine | grep RootFS -A 15"RootFS": {"Type": "layers","Layers": ["sha256:ded7a220bb058e28ee3254fbba04ca90b679070424424761a53a043b93b612bf","sha256:1fee4bd55a8558ea7d3c6853234c5cfd8e0604bce76d06338817535f22858098","sha256:ec7e4a91c33b5d0d8ef5a4a79113648caab03a6176a43407bdc4f548bbdb0c68","sha256:0511ab7e6edc3eadfc6ce2a8a0691c5da36300336453807ca9b4ad87d6a1a6d0","sha256:c23f26e962bd25628cd27d47c812b759beb564299927b7f23cf1679eac91b534","sha256:f2d47996fdfa7691b228d6c50a33c8526e15e2ac958d58c9d47f454885c7d780","sha256:9e173cdce044cd94cc216182cf69274f233491d6582122d31d820e7679553a76"]},"Metadata": {"LastTagTime": "0001-01-01T00:00:00Z"}}

4.4:Dokcerfile常用指令

常规的部署方式,我们也会先选择一个基础操作系统,可能是Cenos,Ubuntu等,而这个基础的操作系统在docker中叫做基础镜像,我们要在其基础上执行自己的操作,在Dokcerfile中使用from指令指定基础镜像,如下:

FROM alpine:3.15                # 选择Alpine镜像
或者
FROM ubuntu:bionic              # 选择Ubuntu镜像

现在基础的操作系统我们已经有了,就可以在上面部署我们自己的文件了,当然想要完成部署,我们首先要将自己的文件拷贝到基础镜像中,对应的指令是COPY,但是需要注意COPY的文件必须在上下文 中存在,如COPY run.jar .
另一个比较常用的指令是RUN用来在运行容器时执行,比如安装某些应用程序运行需要的软件,如:

RUN apt-get update \&& apt-get install -y \build-essential \curl \make \unzip \&& cd /tmp \&& curl -fSL xxx.tar.gz -o xxx.tar.gz\&& tar xzf xxx.tar.gz \&& cd xxx \&& ./config \&& make \&& make clean

然后一个常用的命令是CMD用来指定容器启动时要执行的命令,如CMD echo pwd

再有就是ENV用来设置运行后容器的环境变量,如ENV PATH="/usr/lib/jvm/java-8-openjdk-amd64/jre/bin:${PATH}"。最后就是EXPOSE指令,如EXPOSE 80开放80端口,用来对外开放容器端口,对于需要对外部访问的应用非常重要。

写在后面

参考文章列表:

Docker 镜像加速

清华大学开源软件镜像站 。

sftp的基本使用 。

VMware Workstation Pro 15 for Windows下载与安装 。

高速下载Ubuntu系统【清华大学开源软件镜像站】(ubuntu-22.04.1-desktop-amd64.iso) 。

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...