docker&k8s
  CZHsu4xuhYFz 2023年11月02日 25 0

centos7安装docker

https://blog.csdn.net/weixin_41394654/article/details/126083766?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-126083766-blog-107620356.pc_relevant_recovery_v2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-126083766-blog-107620356.pc_relevant_recovery_v2&utm_relevant_index=4

https://www.runoob.com/docker/centos-docker-install.html

OCI(Open

Container Initiative)

在2015 年,在 Linux 基金会的支持下有了 Open

Container Initiative (OCI)(就是负责制定容器标准的组织),Docker 将自己容器格式和运行时 runC 捐给了 OCI。OCI 在此基础上制定了 2 个标准:运行时标准 Runtime Specification (runtime-spec) 和 镜像标准 Image Specification (image-spec)

CRI(Container

Runtime Interface)

2016年12

月CNCF发布了CRI,为了让Kubernetes同时支持多种容器引擎

容器运行时

容器runtime是容器真正运行的地方,runtime需要和操作系统kernel紧密结合,为容器提供运行环境;比如java程序比作一个容器,JVM就是runtime。JVM为java程序提供运行环境。所以容器只能在runtime里面运行,目前主流的三种容器

runtime是lxc、runc 和 rkt 

容器管理工具

除了运行环境,使用者也得需要工具来管理容器。容器管理工具对内与runtime交互,对外为用户提供interface

lxd是lxc对应的容器管理工具;

runC的管理工具是docker engine。docker engine 包含后台守护进程containerd 和 cli 两个部分。我们通常提到 Docker,一般就是指的 docker engine;

rkt 的管理工具是 rktcl;

docker介绍

docker只是容器的总称,实际的docker由cont

docker实验

用docker安装Tomcat从浏览器访问

service

mesh

服务网格是分布式软件系统内部用于管理所有“服务到服务”通信的一个系统

container

runtime

容器运行时,container

runtime与操作系统紧密协作,为容器提供运行环境,docker的运行环境工具是runC,其他运行环境工具有rkt,kata,gvisor

docker

rmi repository名:tag名

删除image

id相同,但repository和tag不同的多余镜像

docker

--version

查看docker版本

docker

info

查看docker信息

docker

ps -a

查看所有容器,包括运行和停止的

docker

search nginx

搜索nginx镜像(搜索镜像)

docker

container inspect containerID

查看容器的详细信息

docker

rm container

删除容器

docker

rm -f container

强制删除运行中的容器

docker

image ls

列出镜像

docker

rmi image

删除镜像

 docker rmi -f imageid

强制删除镜像

docker

run -p 80:80 -v /data:/data -d nginx:latest

使用镜像

nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data

docker

run name mynginx -d nginx:latest

使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx

docker

run -it nginx:latest /bin/bash

使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令

docker

search imagename

搜索镜像

docker

pause containerID

暂停容器运行

docker

unpause containerID

解除容器暂停

docker

stop containerID

停止容器运行

docker

start containerID

启动容器运行

docker

commit containerID 镜像名称:TAG

构建新的镜像 //docker commit

723514b24673 centos7-vim:centos7

docker

save -o 压缩文件名称 镜像名称:版本号

压缩镜像 //docker save -o nginx.tar

nginx:1.0

docker

load -i 压缩文件名称

解压镜像,并运行

yum

remove docker-ce

卸载docker

rm -rf

/var/lib/docker

删除镜像、容器、配置文件等内容

docker

run -i -t  7cd0652e54ea(镜像ID) /bin/bash

运行交互式的容器

docker

exec -i-t  containerID bash

进入容器

docker-ce

是服务器端软件

docker-ce-cli

是客户端软件

containerd.io

是底层用来启动容器的

docker-compose-plugin 

是compose插件,用来批量启动很多容器,在单台机器上面

docker

run -it -d -p 5000:5000 --restart=always --name registry registry

安装docker私有镜像仓库,并并映射了宿主机的 5000

端口,供 Docker 镜像的上传与下载。其中,--restart=always 表示容器停止时自动重启,这条参数常用于生产环境中

dockerfile学习

1、dockerfile中所用的所有文件一定要和dockerfil文件在同一级父目录,可以为dockerfile父目录的子目录

2、dockerfile中相对路径默认都是dockerfile所在的目录

3、dockerfile中一定要惜字如金,能写到一行的指令,一定要写一行,因为是分层构建,联合挂载这个特性,dockerfile中每一条指令被视为一层

4、dockerfile中指令大小写不敏感,为了区分习惯上用大写

FROM:指定父镜像

指定dockerfile基于那个image构建

MAINTAINER:作者信息

用来标明这个dockerfile谁写的

LABEL:标签

用来标明dockerfile的标签

可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看

RUN:执行命令

执行一段命令 默认是/bin/sh 格式: RUN

command 或者 RUN ["command" , "param1","param2"]

CMD:容器启动命令

提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式

CMD command param1 param2 或者 CMD ["command" , "param1","param2"]

ENTRYPOINT:入口

一般在制作一些执行就关闭的容器中会使用

COPY:复制文件

build的时候复制文件到image中

ADD:添加文件

build的时候添加文件到image中

不仅仅局限于当前build上下文 可以来源于远程服务

ENV:环境变量

指定build时候的环境变量 可以在启动的容器的时候

通过-e覆盖 格式ENV name=value

ARG:构建参数

构建参数 只在构建的时候使用的参数 如果有ENV

那么ENV的相同名字的值始终覆盖arg的参数

VOLUME:定义外部可以挂载的数据卷

指定build的image那些目录可以启动的时候挂载到文件系统中

启动容器的时候使用 -v 绑定 格式 VOLUME ["目录"]

EXPOSE:暴露端口

定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口

格式: EXPOSE 8080 或者 EXPOSE 8080/udp

WORKDIR:工作目录

指定容器内部的工作目录 如果没有创建则自动创建 如果指定/

使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径

USER:指定执行用户

指定build或者启动的时候 用户 在RUN CMD

ENTRYPONT执行的时候的用户

HEALTHCHECK:健康检查

指定监测当前容器的健康监测的命令 基本上没用 因为很多时候

应用本身有健康监测机制

ONBUILD:触发器

当存在ONBUILD关键字的镜像作为基础镜像的时候

当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大

STOPSIGNAL:发送信号量到宿主机

该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。

SHELL:指定执行脚本的shell

指定RUN CMD ENTRYPOINT 执行命令的时候

使用的shell

k8s组件

组件功能

API

Server

负责处理来自用户的请求,其主要作用就是对外提供 RESTful

的接口,包括用于查看集群状态的读请求以及改变集群状态的写请求,也是唯一一个与 etcd 集群通信的组件

Controller

维持副本的期望数目

Scheduler 

是K8S系统的核心组件之一,其主要负责Pod的调度,其监听kube-apiserver,查询未分配

Node的Pod(未分配、分配失败及尝试多次无法分配),根据配置的调度策略,将Pod调度到最优的工作节点上,从而高效、合理的利用集群的资源,该特性是用户选择K8S系统的关键因素之一,帮助用户提升效率、降低能耗.

etcd

是兼具一致性和高可用性的键值数据库,可以作为保存

Kubernetes 所有集群数据的后台数据库。

Kubelet

是工作节点执行操作的

agent,负责具体的容器生命周期管理,根据从数据库中获取的信息来管理容器,并上报 pod 运行状态等(组件位于node上)

Kube-proxy

是一个简单的网络访问代理,同时也是一个 Load

Balancer。它负责将访问到某个服务的请求具体分配给工作节点上同一类标签的 Pod。kube-proxy 实质就是通过操作防火墙规则(iptables或者ipvs)来实现 Pod 的映射(组件位于node上)

coreDNS

可以为集群中的svc创建一个域名IP的对应关系解析

ingress

controller

官方只能实现四层代理, ingress可以实现七层代理

fedetation

提供一个跨集群中心多k8s统一管理的功能

prometheus

提供k8s集群的监控能力

elk

提供k8s集群日志统一分析介入平台

flannel/calico

CNI网络插件 

coredns

服务发现用插件

traefik

服务暴露用插件 

Dashborad

GUI管理插件

kubect

get nodes 

查看所有的节点

kubectl

get pod -n kube-system 

查看是否runing状态

kubectl

create deployment nginx --image=nginx

 创建一个pod

kubectl

get pod 

查看是否runing状态

kubectl

expose deployment nginx --port=80 --type=NodePort 

暴露端口

kubectl

get pod,svc

查看pod

kubectl

get cs 

检查状态

kubectl

apply -f a.yaml 

部署yaml文件

kubectl

get csr 

查看申请

kubectl

logs --tail=200 --all-containers=true -f -n sip -lapp=contractmg

查看日志

kubectl

get pods -o wide 

可以看到pod的ip等完整信息

service

mesh(服务网格)

https://www.cnblogs.com/lidabo/p/16453818.html

k8s中pod的概念

运行于Node节点上,若干相关容器的组合(Kubernetes

之 Pod 实现原理)。Pod内包含的容器运行在同一宿主机上,使用相同的网络命名空间、IP地址和端口,能够通过localhost进行通信。Pod是Kurbernetes进行创建、调度和管理的最小单位,它提供了比容器更高层次的抽象,使得部署和管理更加灵活。一个Pod可以包含一个容器或者多个相关容器。

同一个Pod中的应用可以共享磁盘,磁盘是Pod级的,应用可以通过文件系统调用。

Kubernetes通信问题

1.容器间通信:即同一个Pod内多个容器间通信,通常使用loopback来实现。

2.Pod间通信:K8s要求,Pod和Pod之间通信必须使用Pod-IP 直接访问另一个Pod-IP

3.Pod与Service通信:即PodIP去访问ClusterIP,当然,clusterIP实际上是IPVS或iptables规则的虚拟IP,是没有TCP/IP协议栈支持的。但不影响Pod访问它.

4.Service与集群外部Client的通信,即K8s中Pod提供的服务必须能被互联网上的用户所访问到。

需要注意的是,k8s集群初始化时的service网段,pod网段,网络插件的网段,以及真实服务器的网段,都不能相同,如果相同就会出各种各样奇怪的问题,而且这些问题在集群做好之后是不方便改的,改会导致更多的问题,所以,就在搭建前将其规划好

CNI

CNI(容器网络接口):

这是K8s中提供的一种通用网络标准规范,因为k8s本身不提供网络解决方案。

目前比较知名的网络解决方案有:Flannel、calico、canel、kube-router

CKA认证考试前配置kubectl自动tab补全

kubectl --help | grep bash

//查询关键词completion,有证明系统是否安装了bash-completion自动补全工具

sudo vim /etc/profile //打开profile文件,加入“source <(kubectl completion bash)"

source /etc/profile //使用配置文件生效

sudo source /etc/profile //使配置文件在root用户环境下生效

YAML

:YAML 是一种非常简洁/强大/专门用来写配置文件的语言!

大小写敏感

通过缩进表示层级关系

禁止使用tab缩进,只能使用空格键

缩进的空格数目不重要,只要相同层级左对齐

使用#表示注释

单引号(''): 特殊字符作为普通字符串处理

双引号(""): 特殊字符作为本身想表示的意思

对象: 键值对的字典

数组: 一组按次序排列的列表

纯量: 单个的且不可再分的值

Service

Service(Kubernetes

之服务发现,让容器内服务暴露给外部服务访问)定义了Pod的逻辑集合和访问该集合的策略,是真实服务的抽象。Service提供了一个统一的服务访问入口以及服务代理和发现机制,关联多个相同Label的Pod,用户不需要了解后台Pod是如何运行

Sidecar 

Sidecar 是一个独立的容器,与 Kubernetes

pod 中的应用容器一起运行,是一种辅助性的应用。

例如:服务网格 (service mesh) 代理;监控 Exporter(如 redis exporter);ConfigMap 或/和 Secret Reloader(如 Prometheus 的 Config Reloader);Auth Proxy(如 OAuth Proxy 等);7层反向代理和 Web 服务器;日志整合(审计日志单独发到某个日志渠道。…);Demo 或 AllInOne 应用(如 nextcloud 或 Jaeger AllInOne 等示例应用

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  PVcilKyJJTzb   2023年11月02日   55   0   0 Bashdockergit
  PVcilKyJJTzb   2023年11月02日   49   0   0 nginxdockerhtml
  Q61SiiCoGao8   2023年11月02日   29   0   0 linuxdockerubuntu配置文件
  Q61SiiCoGao8   2023年11月02日   50   0   0 nginxdockerDockerfile
  CZHsu4xuhYFz   2023年11月02日   26   0   0 nginxPoddocker
  jmWSp8RIQOBK   2023年11月02日   35   0   0 MySQLdocker
  PVcilKyJJTzb   2023年11月02日   65   0   0 Bashdocker堆栈
  01BFOGI7NzGp   2023年11月02日   81   0   0 nginxluanginx location ifide
CZHsu4xuhYFz
作者其他文章 更多

2023-11-02

2023-11-02

2023-11-02

2023-11-02

2023-11-02

2023-11-02

2023-11-02

2023-11-02

2023-11-02

2023-11-02