如今快速发展的时代,互联网项目的开发成本和项目维护的成本也在逐渐的减少,如果是以往那种单体的部署项目,那么在如今的时代就显得很臃肿的开发成本很高,效率低下,维护困难,处理速度极其的慢。一旦在分布式和集群的模式下,这些工作就会显得很重要,运维和部署的维护以及监控就显得很重要。什么样的技术能够解决在分布式环境下,能够将多服务集聚在一起解决同一样的问题,他们之间对外是独立,而对内是相互独立,会进行信息的互通的,这就需要一套完善的运维,部署,监控为一体的解决方案之--K8s+Docker真正的分布式进群+Jenkins的监控环境

为了工作的开展和项目的安全和可实施性很多都是在虚拟机下进行或者直接阿里云部署也行。

什么是Docker

          使用最广泛的开源容器引擎,一种操作系统级的虚拟化技术,依赖于Limux内核特性: Namespace和Cgroups ,一个简单的应用程序打包工具。提供简单的应用程序打包工具开发人员和运维人员职责逻辑分离多环境保持一致性。

Docker基本组成

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像

Docker Client:客户端

Ddocker Daemon:守护进程

Docker Images:镜像

Docker Container:容器

Docker Registry:镜像仓库

Docker与VM的对比

k8s docker 镜像 k8s部署docker镜像_数据_02

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_03

什么时候用?

1:应用程序打包和发。2:应用程序隔离持续集成。3:部署微服务。4:快速搭建测试环境。5:提供PaaS产品(平台即服务)

安装Docker

安装环境Centos7上进行安装,Docker有企业版和社区办,企业版比较丰富。

Docker官网:https://www.docker.com/

Docker支持很多有  Linux (CentOS,Debian,Fedora,Oracle Linux, RHEL,SUSE和Ubuntu)Mac

可以查看 权威的文档:https://docs.docker.com

安装之前进行设置

查看centos的版本

k8s docker 镜像 k8s部署docker镜像_数据_04

关闭防火墙

k8s docker 镜像 k8s部署docker镜像_Docker_05

修改selinux为禁用

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_06

查看 getenfore

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_07

安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_08

添加Docker软件包源

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_09

查看yum添加的位置

k8s docker 镜像 k8s部署docker镜像_docker_10

安装Docker CE      yum install -y docker-ce

k8s docker 镜像 k8s部署docker镜像_Docker_11

等待一段时间后。。。

启动Docker服务并设置开机启动

systemctl start docker

systemctl enable docker

运行测试是否成功:

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_12

查看当前的Docker信息

Docker info

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_13

k8s docker 镜像 k8s部署docker镜像_docker_14

创建容器:

docker run -it nginx

查看容器的状态表

docker ps

打开新窗口访问容器 钱查看docker的苏足迹的IP

docker inspect nginx的ID

k8s docker 镜像 k8s部署docker镜像_Docker_15

查看:

curl+IP

k8s docker 镜像 k8s部署docker镜像_Docker_16

进入该容器中

Docker exec -it  ID/NAME

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_17

查看容器内部的文件信息

ls

查看Docker容器

docker ps

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_18

镜像管理

什么是镜像

        Docker镜像是一个不包含Linux内核而又精简的Linux操作系统。,从哪里来? Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容器镜像, Docker工具默认从这个公共镜像库下载镜像。https://hub. docker. com/explore默认是国外的源,下载会慢,建议配置国内镜像仓库:

  配置如下:

编辑文件添加

vi   /etc/docker/daemon.json

{
  "registry-mirrors": [ "https://registry.docker-cn.com"]
}

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_19

k8s docker 镜像 k8s部署docker镜像_Docker_20

重启下Docker

k8s docker 镜像 k8s部署docker镜像_数据_21

拉去镜像

k8s docker 镜像 k8s部署docker镜像_Docker_22

指定拉去镜像

k8s docker 镜像 k8s部署docker镜像_docker_23

镜像与容器联系

      镜像不是一个单一的文件,而是有多层构成。我们可以通过docker history <ID/NAME> 查看镜像中各层内容及大小,每层对应着Dockerfile中的一条指令。Docker镜像默认存储在/var/lib/docker/<storage-driver>中。 容器其实是在镜像的最上面加了一层读写层,在运行容器里做的任何文件改动,都会写到这个读写层。如果容器删除了,最上面的读写层也就删除了,改动也就丢失了。 Docker使用存储驱动管理镜像每层内容及可读写层的容器层。

查看Docker的镜像容器的层次

k8s docker 镜像 k8s部署docker镜像_docker_24

k8s docker 镜像 k8s部署docker镜像_Docker_25

k8s docker 镜像 k8s部署docker镜像_Docker_26

镜像管理常用命令

使用Docker --help  如:

docker image -help

k8s docker 镜像 k8s部署docker镜像_数据_27

查看镜像的详情

k8s docker 镜像 k8s部署docker镜像_数据_28

Docker的拉取

k8s docker 镜像 k8s部署docker镜像_数据_29

Docker的删除

k8s docker 镜像 k8s部署docker镜像_数据_30

给镜像标记

k8s docker 镜像 k8s部署docker镜像_Docker_31

总结如下:

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_32

容器管理-创建容器常见选项

k8s docker 镜像 k8s部署docker镜像_Docker_33

创建容器:

docker container run -itd --name bs busybox

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_34

进入容器

docker container attach bs

k8s docker 镜像 k8s部署docker镜像_数据_35

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_36

从新进入提示如上 是退出容器就退出终端  

解决:

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_37

然后执行ctrl+p+q

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_38

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_39

查看系统容器的挂载情况

k8s docker 镜像 k8s部署docker镜像_数据_40

三个文件被修改  重启都是无法生效的

如:

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_41

退出 :ctrl+p+q

在重启:

k8s docker 镜像 k8s部署docker镜像_docker_42

暴露容器的端口

docker container run -itd -p 8080:80 --name nginx01 nginx

k8s docker 镜像 k8s部署docker镜像_Docker_43

访问测试 log日志

k8s docker 镜像 k8s部署docker镜像_Docker_44

k8s docker 镜像 k8s部署docker镜像_Docker_45

日志存储在 

k8s docker 镜像 k8s部署docker镜像_Docker_46

查看josn的log输出

k8s docker 镜像 k8s部署docker镜像_数据_47

重要持续运行重要的项目就需要实施的重启 命令

docker container run -itd -p 8081:80 --name nginx03 --restart=always nginx

如下是docker 容器的命令

k8s docker 镜像 k8s部署docker镜像_docker_48

限制容器使用的CPU 

k8s docker 镜像 k8s部署docker镜像_Docker_49

限制物理内存

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_50

查看:

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_51

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_52

容器管理-容器管理常用命令

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_53

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_54

进入容器:

k8s docker 镜像 k8s部署docker镜像_数据_55

docker容器的提交

k8s docker 镜像 k8s部署docker镜像_数据_56

管理应用程序数据-数据卷

Docker提供三种不同的方式将数据从宿主机挂载到容器中:volumes,bind mounts和tmpfs。 volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。 bind mounts:可以存储在宿主机系统的任意位置。 tmpfs:挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统。

k8s docker 镜像 k8s部署docker镜像_docker_57

如上位置是存储数据集的文件

k8s docker 镜像 k8s部署docker镜像_Docker_58

创建数据卷和查看详细的信息

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_59

创建器并且使用数据卷  重要的数据持久化在数据卷中

k8s docker 镜像 k8s部署docker镜像_Docker_60

打开新的会话查看

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_61

删除所有的容器

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_62

ps:但是容器删除 数据卷还在  可以继续引用

如:

k8s docker 镜像 k8s部署docker镜像_Docker_63

访问依然可以  添加页面测试

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_64

测试数据卷之间的共享

k8s docker 镜像 k8s部署docker镜像_数据_65

同一个数据卷

没有指定数据卷的名称 则是一个匿名的数据卷  如

k8s docker 镜像 k8s部署docker镜像_数据_66

将数据卷挂在到宿主机上

k8s docker 镜像 k8s部署docker镜像_Docker_67

实战

管理应用程序数据-搭建LNMP网站平台

远程下载:get https://cn.wordpress.org/wordpress-4.7.4-zh_CN.tar.gz

k8s docker 镜像 k8s部署docker镜像_数据_68

自定义网络

先删除

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_69

自定义

k8s docker 镜像 k8s部署docker镜像_数据_70

查看

k8s docker 镜像 k8s部署docker镜像_数据_71

创建Mysql数据库容器

docker run -itd \ --name lnmp_mysql \ --net lnmp \ -p 3306:3306 \ --mount src=mysql-vol,dst=/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:5.7 --character-set-server=utf8

k8s docker 镜像 k8s部署docker镜像_docker_72

查看数据卷

k8s docker 镜像 k8s部署docker镜像_Docker_73

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_74

创建所需数据库

docker exec lnmp_mysql sh \ -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e"create database wp"'

k8s docker 镜像 k8s部署docker镜像_docker_75

装mysql的客户端

k8s docker 镜像 k8s部署docker镜像_Docker_76

链接mysql测试

k8s docker 镜像 k8s部署docker镜像_docker_77

创建PHP环境容器

docker run -itd \ --name lnmp_web \ --net lnmp \ -p 88:80 \ --mount type=bind,src=/app/wwwroot,dst=/var/www/html richarvey/nginx-php-fpm

解压上传的压缩包

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_78

查看

k8s docker 镜像 k8s部署docker镜像_Docker_79

访问测试之前 添加开发的端口

k8s docker 镜像 k8s部署docker镜像_数据_80

k8s docker 镜像 k8s部署docker镜像_数据_81

k8s docker 镜像 k8s部署docker镜像_docker_82

 

k8s docker 镜像 k8s部署docker镜像_docker_83

网络管理-四种网络模式

k8s docker 镜像 k8s部署docker镜像_Docker_84

k8s docker 镜像 k8s部署docker镜像_Docker_85

bridge 默认网络,Docker启动后默认创建一个docker0网桥,默认创建的容器也是添加到这个网桥中。

host 容器不会获得一个独立的network namespace,而是与宿主机共用一个。  

none 获取独立的network namespace,但不为容器进行任何网络配置。

 container 与指定的容器使用同一个network namespace,网卡配置也都是相同的。  自定义 自定义网桥,默认与bridge网络一样。

默认bridge的工作方式:

k8s docker 镜像 k8s部署docker镜像_Docker_86

Dockerfile-常用指令

docker指令

构建网站

k8s docker 镜像 k8s部署docker镜像_数据_87

构建java网站环境镜像

vi Dockerfile文件

FROM centos:7 MAINTAINER www.aliangedu.com ADD jdk-8u45-linux-x64.tar.gz /usr/local ENV JAVA_HOME /usr/local/jdk1.8.0_45 ADD apache-tomcat-8.0.46.tar.gz /usr/local COPY server.xml /usr/local/apache-tomcat-8.0.46/conf RUN rm -f /usr/local/*.tar.gz WORKDIR /usr/local/apache-tomcat-8.0.46 EXPOSE 8080 ENTRYPOINT ["./bin/catalina.sh", "run"]

构建

k8s docker 镜像 k8s部署docker镜像_Docker_88

ps:需要将需要的安装包传入根目录下

构建私有镜像仓库Harbor

       Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,Harbor是镜像仓库,那么就应当是存储镜像的,镜像的存储harbor使用的是官方的docker registry服务去完成,harbor的功能是在此之上提供用户权限管理、镜像复制等功能,提高使用的registry的效率。

下载对应的二进制安装包进行安装

如:

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_89

k8s docker 镜像 k8s部署docker镜像_Docker_90

安装docker

自签证书生成

解压包  harbor

 

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_91

k8s docker 镜像 k8s部署docker镜像_docker_92

名字可以输入其他提示可以不用管

k8s docker 镜像 k8s部署docker镜像_docker_93

上述命令可以写成自己的地址和信息

查看生产的证书

k8s docker 镜像 k8s部署docker镜像_数据_94

k8s docker 镜像 k8s部署docker镜像_docker_95

待更新。。。。。。。。。。。。。。

什么是Kubernetes

    Kubernetes是Google在2014年开源的一个容器集群管理系统, Kubernetes简称K8s。K8S用于容器化应用程序的部署,扩展和管理。K8S提供了容器编排,资源调度,弹性伸缩,部署管理,服务发现等一系列功能。Kubernetes目标是让部署容器化应用简单高效。

特点

     1: 自我修复在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检查失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。

   2:弹性伸缩使用命令、U1或者基于CPU使用情况自动快速扩客和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务。

  3:自动部署和回深K8S采用滚动更新策略更新应用,一次更新一个Pod,而不是同时删除所有Pod,如果更新过程中出现问题,将回滚更改,确保升级不受影业务。·

  4:服务发现和负载均衡K8S为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称) ,并且负载均衡关联的所有容器,使得用户无需考虑容器P问题。·

  5:机密和配置管理管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。并可以将一些常用的配置存储在K8S中,方便应用程序便用。·

  6:存储编排挂载外部存储系统,无论是来自本地存储,公有云(如AWS) ,还是网络存储(如NFS、 GlusterS、 Ceph)都作为集群资源的一部分使用,极大提高存储使用灵活性。·批处理提供一次性任务,定时任务;满足批量数据处理和分析的场景。

架构

k8s docker 镜像 k8s部署docker镜像_数据_96

组件

k8s docker 镜像 k8s部署docker镜像_Docker_97

k8s docker 镜像 k8s部署docker镜像_Docker_98

核心部分

a: Pod最小部署单元-组容的集合-个Pod中的容器共享网络命名空间 Pod是短暂的

b:Label :标签,附加到某个资源上,用于关联对象、查询和筛选

c:Namespace:命名空间,将对象逻辑上隔离

d:Controllers ReplicaSet :确保预期的Pod副本数量Deployment:无状态应用部署StatefulSet :有状态应用部署DaemonSet:确保所有Node运行同一个PodJob:一次性任务Cronjob:定时任务更高级层次对象,部署和管理Pod

e:Service防止Pod失联·定义一组Pod的访问策略

集群规划

k8s docker 镜像 k8s部署docker镜像_数据_99

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_100

配置准备

关闭防火墙

k8s docker 镜像 k8s部署docker镜像_k8s docker 镜像_101

修改主机Master名称

k8s docker 镜像 k8s部署docker镜像_数据_102

 加入:

k8s docker 镜像 k8s部署docker镜像_Docker_103

查看

k8s docker 镜像 k8s部署docker镜像_Docker_104

同理其他的node也一样

wait。。。。。。。。。。。。。。。。。。。。。。。。。