哔哩哔哩中Openshift红帽培训

 

 

 

 

 

 

 

 

 1、docker的安装

使用yum install daocker

 

 

 在启动docker之前,配置docker的后端存储,默认情况下Docker的存放位置为:/var/lib/docker,我们不推荐,docker-storage-setup千万不能先启动docker

1. 直接添加一块空闲的硬盘座位后端存储

编辑 /etc/sysconfig/docker-storage-setup 添加如下内容:

DEVS=/dev/sdb  # 添加的硬盘
VG=docker-vg

完成以后直接执行命令 docker-storage-setup

这一种内部做的操作:

  1. 将空余块设备(可以是分区)创建成physical volume(pv)
  2. 在由这些PV组成volume group(vg)
  3. 从vg中建立两个logical volume(lv),data和matedata
  4. 将data和matedata映射成thin-pool
上面/dev/sdb就是我们单独给docker添加的一块后端磁盘

 

搜索镜像

 

 下载镜像

docker的hub仓库

 

 下载镜像

默认下载镜像是从docker的官网上面下载,非常的缓慢,我们需要修改为国内的镜像

 

 

 

 镜像拉取下来之后就可以查看镜像

 

 

接下来有了镜像之后,我们需要将镜像启动起来变成容器

 

下面是启动一个httpd容器

 

 -d表示后端运行 80:80 第一个80是主机的端口,后面是80是容器的端口

容器启动成功之后,可以使用exec命令进行容器

 

查看运行的容器的进程

 

 容器 exit 退出,查看退出的容器可以使用docker  ps -a这个命令

 

 可以使用docker rm 删除已经退出的容器,运行中的容器不能删除

可以使用docker stop 停止正在运行中的容器

 

 docker save将镜像打包成文件

 

 删除镜像

 

 镜像保存之后,我们也可以将镜像从文件导入进来

 

 接下来使用docker  file创建镜像

dcokefile文件可以从官网上面下载

 

 dockerfile下载完成之后我们存储在某个文件夹下面,文件名称必须是Dockerfile,在/tmp/httpdv1下面存储了Dockerfile文件,前面那个qin那个是镜像的tag

 

 接下来,我们讲讲将一个容器制作成为一个本地镜像

我们先运行一个容器使用name指定容器的名称

 

 我们将qindebian容器制作成为一个镜像

 

 使用docker export将一个容器导出成一个文件,接下来在使用docker imprort将文件导出成一个镜像

 

 

 

 接下来讲讲容器中的-d -P的含义

-d表示容器在后台运行

-P这里是大写,表示将随机选择一个宿主机的端口和容器的端口进行绑定

-p这里是小写,指定宿主机的端口和容器的端口进行绑定

 

 

 

 对于后台的容器,可以使用docker exec进入容器

 

 停止容器和删除容器

 

 接下来看下面的这个命令

 

 指定主机的18888端口和容器的80端口进行映射,--restart=always表示主机重启之后,这个容器也会自动运行

接下来我们让主机的目录和容器中的某个目录进行映射

 

 -v 进行文件目录的映射

第一个名称/qinhttpd/html是主机的目录

 

 主机和容器文件的拷贝

1、从容器中拷贝到主机中

 

 2、文件从主机中拷贝到容器中

 

 接下来我们来创建一个mysql容器

 

 -e是指定容器启动的差数

主机33060对应容器mysql的3306端口

-e指定mysql超级管理员的密码为redhat

-e创建一个mysq用户为qin

-e指定qin用户的密码为qin

指定主机的/qin/mysql文件夹和容器中国的、var/lib/mysql进行绑定

现在我们已经创建好了一个mysql的容器,其他容器如果要使用mysql这个容器,如何使用了需要使用--link属性

 

 我们创建了一个qincentos的容器,在这个容器中使用到了qinmysql这个容器

查看一个容器的详细信息和IP地址

 

 接下来我们讲讲,在生产上面是禁止上外网的,我们需要在本地建立一个本地的镜像仓库

首先我们要拉取一个registry的镜像

 

接下来我们要启动这个镜像

 

 

 接下来需要将一个容器添加到本地的镜像库中

先添加一个tag,这里registry是本地仓库registry所在的主机的hostname

 

 现在有了tag,需要将tag推送到本地仓库中

推送之前需要在当前的机器上面添加registry仓库的地址

 

 

 

 

 

 

 

 

 下载

 

 我们可以到registry中查看仓库的信息

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 k8s集群的安装至少需要3台机器

三台机器需要关闭防火墙。selinux等

 

 第一步:3台机器安装上面的步骤安装docker

第二步:将master机器作为registry

 

 在master下面把下面的这些镜像拉取下来

 

 接下来在master上面需要将上面的镜像push 到registry中,在node1和node2节点上面就可以拉取下来

 

 在node1和node2把上面的全部下载下来

 

 

 

 4台机器,classroom存储镜像

master :Openshift的master节点

node:Openshift的node节点

workstations:Openshift的客户端

安装k8s

使用163的yum源

master节点上面的安装

 

 安装好之后,接下来需要修改配置文件

 

 第一修改apiserver的配置如下

 

 下图中master写错了少写了一个s

 

 

 

 接下来修改config文件

 

 

/d

 

 接下来在master上面就可以启动k8s的在master节点上面的四个模块了

 

 启动成功之后,可以使用下面的命令检查k8s组件的状态是否启动成功

 

 接下来在k8s的两个node节点上面要进行下面的安装

 

 

 

 接下来修改node的配置

 

 

 

 

需要修改上面的四个地方,第一个是node的ip,第二个是node的hostname

第三个是k8smaster的地址,第四个需要修改为上面本地仓库的上面的google_containers镜像

 

 

接下来还需要在node节点添加一个内部的dns的解析

 

 接下来还需要在node1和node2机器上面修改下面的配置

 

 

 

 

 

 修改的内容如下

 

 

 

 

 接下来在node节点上面启动k8s了

 

 这样整个k8s集群就已经安装成功了

接下来我们需要给k8s安装网络组件flannel

安装必须保证整个k8s已经正常启动了

 

 在master节点上面

 

 创建之后接下来需要修改下etcd的配置文件

 

 

修改的内容如下

 

 

 

 

 

 修改了配置之后,需要重启

 

 验证配置是否生效

 接下来在master node1 node2节点上面安装

 

 

 

接下来需要在master  node1 node2上修复flannel的配置

 

 

 

 使用使用flanne,需要在三台机器上面将之前的网络删除

 

 接下来在三台机器上面启动网络

 

 整个集群下面的都是属于下面的这个子网中

 

 接下来我们使用k8s创建一个pod

 

 创建pod之后我们可以多pod进行动态的扩容

 

 我们也可以进入到pod中

 

 我们启动的pod都在node1和node2节点上面

 

 我们可以使用下面的命令把我们正在运行的qinnginxxdm导出成yaml的配置文件

 

 也可以导出成json的格式

 

 

 

我们可以使用delete删除对应的资源

 

 k8s存在哪些资源,如下图所示

 

 k8s中的namespace等于Openshift中的project的资源

默认情况下k8s启动的时候创建两个namespace

 

 查看某个namespace下面的pod

 

 创建namespace

 

 通过yaml创建namespace

 

 

 

 

 

 

接下来我们来讲解下k8s的pod资源

 

 我们通过一个yaml来创建一个pod

 

 label标签主要是通过label标签可以搜索pod

host是主机真机的端口

containsPort是容器内的端口

env是指定容器内的环境参数变量

pod存储一个容器,名字叫qinhttpd24

 上面没有说明pod属于哪个namespace

 

 

 

 

 

 

 

 

 我们使用下面的命令查看pod的ip地址,这个ip对应之前flannel分配的IP

 

 

 我们创建一个namespace,我们在改namespace下面创建一个pod

 

 

 

 

 

 

 

 

 查询pod的时候必须携带上namespace的名称了

 

 

 

--all-namespace查询全部namespace下面的pod

 

 

 k8s提供了查询资源的命令

 

 

 显示了node1这个节点的全部资源

查看某个pod的具体信息

 

 

 

 

 

 

 

 

 

通过lab查看容器

 

 

删除固定命名控件下的pod

 

 

 现在有了master节点 node1和node2节点

如果多了一台机器node4,我们可以在上面安装k8s的客户端工具,通过工具可以操作k8s

 

 

 

 k8s的rc资源用来管理pod的

rc可以一次性部署多个pod

rc的模板如下

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

接下来我们编写一个nginx的rc模板

 

 

 我们重点分析上面创建了一个rc模块,rc中的select要选择模板,所以上面select下面的name的名字必须和template下面的label的名字必须一模一样

上面的含义就是rc中rc中的select要选择模板为qinnginx的template进行创建,创觉得replicas副本数目是3

rc资源的名称是qinnginxrc

模板为qinnginx的template本质上就是pod,该pod下面的资源就是对于的容器,如下面所示

 

 

 

 

 

 

 

 

 

 

这里只指定了容器中的端口是80,没有指定外面主机的端口,因为容器可以创建无数个,所以这里不可能写无数个外面主机的端口

接下来就创建

 

 

 这里一定要注意使用rc创建的3个pod,如果使用 delete删除了某个pod,rc会立刻在创建一个新的pod,保证pod的数目永远是3,这里一定要注意

所以我们要删除只能删除rc

 

 

 使用rc创建的pod,在k8s集群内部的三台机器可以使用下面的地址在集群内部访问pod

 

 

 但是我们在集群外部要访问这样办了,我们在rc的模板中没有指定外部主机的端口,这就需要service这个资源了

 

 

 service通过rc模板中国的labal selector和rc进行关联

 

 

 我们创建一个service的模板

 

 

 这里service中的selector的那么必须和rc中template中的name一致,service本质就是要将rc中创建的pod暴露出去

 

 

 

第二个targetport这里必须是rc中容器中应用对应的端口80,必须一一对应

 

 

 第三个:18888就是service暴露的集群外卖能够访问的端口

我们指定使用rc创建的pod,在pod销毁之后重新创建的pod,新的pod的ip地址在集群内会发送变化

那么service服务的ip在整个k8s集群内是不会发生变化的,service服务ip的地址在k8s中在那个地方定义的了

上面的18888端口对应的不是k8s中的master  node1 node2使用flannel指定的主机的端口,而是对应的service的的端口,service的ip地址在下面的在创建k8s的时候

在apisevice配置文件中定义了service的ip

 

 

 

 

 

 这个10.254.0.0就是给sevice分配的IP,每创建一个serivice就会给service分配一个IP

这里seviceIP也叫做k8s集群的IP,sevice创建成功之后IP地址不会发送变化

 

 

 这个10.254.218.32这个IP不会在发送变化了

我们可以使用describe来查看service的详细信息

 

 

 

我们可以看到当前service  的ip地址就是10.254.218.32 ,访问10.254.218.32的18888端口,最终会路由到endpoint容器内的10.0。65.2:80 10.0.65.3:80这里面的容器内

这里要注意:10.254.218.32:18888只能集群内部的master  node1 node2三台机器能够访问,集群外部是无法访问的,所有service IP也被称为集群IP

注意点:集群内部能通过10.254.218.32:18888访问18888端口暴露出来的资源,但是在集内部直接使用ping service的ip,是不能 够ping通的

 

 现在集群外部的机器如有一台node4如何访问serivic了,因为直接通过10.254.218.32:18888集群外部是无法访问的

这个时候可以修改service的yaml文件,增加service对外暴露的配置,这里选择一种nodeport的方式暴露service的服务

 

 

 

 

 这里还需要修改下面的apisevice的配置,修改了配置之后需要重启服务

 

修改内容如下

 

 

 

 

 

这样在集群外部我们就可以直接使用master  node1和node2的三台集群的IP加上对应的端口28888,就能够访问了

 

 

下面讲的是nodeport+service的访问对外暴露

对应pod直接使用pod的模板创建pod,我们也可以使用service

 

 

po的模板

 

 serivice中的selector name必须和pod中国的labbels的name一致

在pod的模板中不用在指定外机器的hostPort

这里要补充下:上面的rc的升级版本是deployment资源,在Openshift中就使用deployment模板来创建pod

第二个就是模板中的env参数作用,列如我们创建mysqlpod,我们就可以在创建mysql的pod模板中使用env指定mysql的root密码。用户和用户密码等参数

第三个:一个pod下面配置多个容器,只需要在pod的模板的容器下面配置多个容器的镜像就可以了,一定要保证一个pod下面的各个容器的端口千万不能冲突

下面就是一个pod有一个httpd和一个mysql。生产上面尽量一个pod下面最好只有一个容器

 

posted on 2020-11-21 14:25  luzhouxiaoshuai  阅读(403)  评论(0)    收藏  举报

导航