文章资讯
kubernetes和docker学习分享
2022-07-22 10:14  浏览:6
开源的容器引擎,也是系统级的虚拟化技术。

这个是官方的图片,docker采用货轮集装箱的概念进行设计,将服务器(货轮)上的应用(货物)通过容器(集装箱)的方式进行了隔离。,三种学习或者使用方式均可,如果是初期学习没有资源的情况下建议可采用第三种方式。,客户端 容器 镜像(本地/镜像仓库)
,dockerfile是用于构建镜像的,是一个文本文件,里边由多条指令组成。
示例:,如果是从其他途径拷贝过来的镜像可导入本地docker环境,再进行其他的操作。,上方的镜像构建成功后可运行起来,运行后本机可访问容器。
,容器集群管理系统,可以简单理解是为了方便管理多docker容器的。,下方示例为官方的yaml文件格式,从行的缩进关系中可看到存在层级关系。,通过dashboard页面点击配置完成部署。,kubectl apply -f nginx.yaml,k8s集群部署过程中大部分均可通过后台完成。kubectl是一个用于操作kubernetes(看k8s)集群的命令行接口,通过利用kubectl的各种命令可以实现各种功能,是在使用kubernetes中非常常用的工具。 也是访问api server的命令行客户端工具。,容器运行起来后,本身如果不配置网络策略是无法去正常访问的,因此就需要配置相应的网络策略,在k8s常见的网络策略有以下几种。,

前言:自己近段时间学习了docker和kubernetes技术,按照自己的理解进行知识体系的梳理,同时也希望能够帮到正在学习或者想要学习的小伙伴,如有不对烦请指正,共同学习进步。

一、Docker 1.是什么?

开源的容器引擎,也是系统级的虚拟化技术。

这个是官方的图片,docker采用货轮集装箱的概念进行设计,将服务器(货轮)上的应用(货物)通过容器(集装箱)的方式进行了隔离。

2.有什么用?
  • 能够解决环境不一致性的问题(内外网)

注:尤其是内外网,比如内网服务器需要安装某个组件或应用时,经常需要耗费大量时间解决相关环境依赖才能安装。

  • 启动部署更快速(秒级/分钟级)
  • 服务器资源使用率高.
3.怎么用? 1.环境搭建
  • linux
  • windows Vm
  • windows:【docker desktop】

三种学习或者使用方式均可,如果是初期学习没有资源的情况下建议可采用第三种方式。

2.对象

客户端 容器 镜像(本地/镜像仓库)

疑问:镜像是什么,容器又是什么?
解答:可以简单理解为镜像是一个系统级封装后的文件包,运行起来后叫容器。

4.常用命令汇总 1)基础命令
后台运行容器
docker run -d nginx   #-d:后端运行
进入容器
docker exec -it 
 
    -- bash/sh
查看容器日志
docker logs 
  
    常用标准命令 docker run -d -p 8012:8012 --name 
    
    
      例: docker run -d -p 8081:80 --name nginx_web nginx:v1.21.1 重启容器 docker restart 
     
       查看当前运行所有的容器 docker container ls #新命令 docker ps -l #老命令 查看最近一个运行的容器 docker ps -a #老命令 查看所有容器 
     
    
   
  
 
2)扩展命令
查看容器的详细信息
docker inspect 
 
  
查看容器运行端口
docker port 
  
    查看容器内的进程 docker top 
   
     查看容器资源利用率 docker stats 
    
      移除所有已经停止运行的容器 docker container prune 打印所有运行的容器ID docker ps -q 
    
   
  
 
5.镜像【重点】

疑问:镜像从哪里来?
解答:镜像可以从网上下载或者自己制作

1)制作镜像:

疑问:制作镜像需要什么?
原材料:Dockerfile文件、安装包、配置文件、以及安装过程中所需要的依赖。
方法:Dockerfile文件的编写主要有两个重点,一个是按照其固定的格式,其余的就是一个文件的完整安装和启动步骤。如自己需要构建镜像刚开始不了解时可网上多查参考别人的示例进行镜像的构建测试学习。

dockerfile是用于构建镜像的,是一个文本文件,里边由多条指令组成。
示例:

#基准镜像
FROM centos:7
#作者信息
MAINTAINER author:xupeng  mail:<[email protected]> 
#定义时区(容器时间和宿主机保持一致)
ENV TIME_ZOME Asia/Shanghai
#安装依赖&清理仓库
RUN yum -y install gcc patch zlib zlib-devel pcre-devel openssl openssl-devel telnet curl 
    && yum clean all
#添加本地文件
ADD nginx-1.21.4.tar.gz /usr/local/
COPY nginx_upstream_check_module-master/ /usr/local/nginx_upstream_check_module-master/
#切换工作目录(容器目录)
WORKDIR /usr/local/nginx-1.21.4/
#编译安装
RUN patch -p1 < /usr/local/nginx_upstream_check_module-master/check_1.20.1+.patch 
    && ./configure 
--prefix=/usr/local/nginx/ 
--add-module=/usr/local/nginx_upstream_check_module-master/ 
--with-compat 
--with-file-aio 
--with-threads 
--with-http_addition_module 
--with-http_auth_request_module 
--with-http_dav_module 
--with-http_flv_module 
--with-http_gunzip_module 
--with-http_gzip_static_module 
--with-http_mp4_module 
--with-http_random_index_module 
--with-http_realip_module 
--with-http_secure_link_module 
--with-http_slice_module 
--with-http_ssl_module 
--with-http_stub_status_module 
--with-http_sub_module 
--with-http_v2_module 
--with-mail 
--with-mail_ssl_module 
--with-stream 
--with-stream_realip_module 
--with-stream_ssl_module 
--with-stream_ssl_preread_module 
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' 
--with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' 
    && make 
    && make install 
    && rm -rf /usr/local/nginx_* 
    && rm -rf /usr/local/nginx-* 
    && echo "${TIME_ZOME}" > /etc/timezone 
    && ln -sf /usr/share/zoneinfo/${TIME_ZOME} /etc/localtime 
    && ln -sf /dev/stdout /usr/local/nginx/logs/access.log  
    && ln -sf /dev/stderr /usr/local/nginx/logs/error.log
#复制配置文件到容器中 #复制测试页面到容器中
COPY nginx.conf /usr/local/nginx/conf/nginx.conf
COPY index.html /usr/local/nginx/html/
#切换工作目录(容器目录)
WORKDIR /usr/local/nginx/
#设置sbin环境变量
ENV PATH /usr/local/nginx/sbin:$PATH 
#声明对外暴露端口
EXPOSE 80
EXPOSE 443
#启动命令
ENTRYPOINT ["nginx"]
CMD ["-g","daemon off;"]
2)打标签/推送到仓库
docker tag 
 
  :
   
   
    :
    
      docker push 
      
     
    
   
  
 
3)本地tar包导入docker

如果是从其他途径拷贝过来的镜像可导入本地docker环境,再进行其他的操作。

docker load -i image.tar
6.网络【重点】

7.示例演示

上方的镜像构建成功后可运行起来,运行后本机可访问容器。

二、Kubernetes 1.概念

容器集群管理系统,可以简单理解是为了方便管理多docker容器的。

1.作用 2.有哪些优点
  • 1.统一调度、部署、负载
  • 2.和docker、containerd无缝衔接
  • 3.部署平滑升级/回滚
  • 4.多样的调度策略
  • 5.监控
3.结构

下方示例为官方的yaml文件格式,从行的缩进关系中可看到存在层级关系。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
2.网络架构

3.使用(部署) 1.前台部署

通过dashboard页面点击配置完成部署。

2.编排文件部署

kubectl apply -f nginx.yaml

4.常用命令汇总

k8s集群部署过程中大部分均可通过后台完成。kubectl是一个用于操作kubernetes(看k8s)集群的命令行接口,通过利用kubectl的各种命令可以实现各种功能,是在使用kubernetes中非常常用的工具。 也是访问api server的命令行客户端工具。

查询资源

kubectl get pods  #查询容器(容器名称/实例个数/运行状态/运行时间)
kubectl get pods -o wide #查询容器和对应的容器ip地址及当前容器所在的节点地址
kubectl get deployment  #查询控制器
kubectl get configmap  #查看配置文件
kubectl get service  #查询网络服务

查看资源使用率
kubectl top pods   #容器
kubectl top nodes  #节点服务器

查看容器日志
kubectl logs 
 
  

查看容器详情信息
kubectl describe pod 
  
    kubectl describe 
    
    
      进入容器 kubectl exec -it 
     
       bash 部署/升级资源 kubectl apply -f 
       
      
     
    
   
  
 

注:在实际使用过程中要注意自己当前操作的命名空间,否则命令可能会执行失败。

5.网络访问方式

容器运行起来后,本身如果不配置网络策略是无法去正常访问的,因此就需要配置相应的网络策略,在k8s常见的网络策略有以下几种。

- 集群内访问

【用来给集群内的其他服务提供一个固定的IP地址或者域名访问方式。】

- 节点访问

【同时提供了集群内访问+节点访问,将容器端口和服务器iptables建立关联,来实现从服务器外部访问该应用。和docker run -d
p 80:80部分同理。】

- 负载均衡

【对外提供统一地址和端口,负载均衡策略,一般在云厂商上应用较多。】

- ingress

【提供7层网络负载,通过url匹配的方式进行访问。】

三、总结 1.学习途径:

在学习过程中,我主要就是在腾讯课堂中看的阿良老师的课程。如果同学在学习该帖子的过程对具体概念或者方式不明白的,推荐去学习阿良老师的课程,讲解的非常清楚。

2.学习方式:

多敲命令多练习,遇到不明白的或者有疑惑的多实践才能加深印象和理解。文章中附件如有需要可私信。

,开源的容器引擎,也是系统级的虚拟化技术。

这个是官方的图片,docker采用货轮集装箱的概念进行设计,将服务器(货轮)上的应用(货物)通过容器(集装箱)的方式进行了隔离。