docker&k8s入门详解

  • 一、Docker
    • 1.1 什么是Docker
    • 1.2为什么要使用docker?
      • 1.更快速的交付和部署
      • 2.更高效的虚拟化
      • 3.更轻松的迁移和扩展
      • 4.更简单的管理
      • 5.对比传统虚拟机总结
    • 1.3 基本概念
      • 1. 镜像(Image)
      • 2.容器(Container)
      • 3.仓库(Repository)
    • 1.4 Docker安装
      • 1. CentOS(7以上)
      • 2.Ubuntu
    • 1.5 基础命令
    • 1.6 docker 搭建私有仓库
      • <1> 环境准备
      • <2>私有仓库
      • <3>使用registry 启动私有仓库容器
      • <4>上传镜像
    • 1.7 Dockerfile
      • 1.7.1Docker语法介绍
      • 1.7.2.Dockerfile 构建实例
    • --prefix=/usr/local/nginx \\指定安装路径
    • --user --group \\指定nginx的所有者,所属者
    • --with-http_stub_status_module \\声明启用service status页,默认不启用
    • --with-http_ssl_module \\启用ssl模块,以支持https请求
  • 二、Kubernetes
    • 2.1 Kubernetes介绍
    • 2.2 Master介绍
    • 2.3 Node介绍
    • 2.4 Kubernetes 中Master与Node工作内容
    • 2.5 Pod介绍
    • 2.6 Label
    • 2.7 RC(Replication Controller)
    • 2.8 HPA(horizontal Pod Autoscaler Pod横向自动扩容)
    • 2.9 service
    • 2.10 Volume 存储卷
    • 2.11 namespace命名空间
    • 2.12 kubernetes基础命令
    • 2.13 使用kubeadm自动搭建kubernetes集群
        • 1 服务器准备
        • 2 节点配置
        • 3 安装docker(前面已介绍)
        • 4 安装kubeadmin、kubelet、kubectl
        • 5 安装ETCD集群
        • 6 初始化k8s集群
        • 7 尝试安装一个mysql服务
  • cpu: "2"
  • 三 结束了

一、Docker

1.1 什么是Docker

Docker 是一个开源项目, 诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0协议, 项目代码在 GitHub 上进行维护。Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容( LXC)等技术。在 LXC 的基础上 Docker 进行了进一步的封装, 让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。
Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。docker就是类似的理念。现在都流行云计算了,云计算就好比大货轮。docker就是集装箱。
1.不同的应用程序可能会有不同的应用环境,比如.net开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都安装在一个服务器上就要调试很久,而且很麻烦,还会造成一些冲突。比如IIS和Apache访问端口冲突。这个时候你就要隔离.net开发的网站和php开发的网站。常规来讲,我们可以在服务器上创建不同的虚拟机在不同的虚拟机上放置不同的应用,但是虚拟机开销比较高。docker可以实现虚拟机隔离应用环境的功能,并且开销比虚拟机小,小就意味着省钱了。
2.你开发软件的时候用的是Ubuntu,但是运维管理的都是centos,运维在把你的软件从开发环境转移到生产环境的时候就会遇到一些Ubuntu转centos的问题,比如:有个特殊版本的数据库,只有Ubuntu支持,centos不支持,在转移的过程当中运维就得想办法解决这样的问题。这时候要是有docker你就可以把开发环境直接封装转移给运维,运维直接部署你给他的docker就可以了。而且部署速度快。
3.在服务器负载方面,如果你单独开一个虚拟机,那么虚拟机会占用空闲内存的,docker部署的话,这些内存就会利用起来。

1.2为什么要使用docker?

作为一种新兴的虚拟化方式, Docker 跟传统的虚拟化方式相比具有众多的优势。首先, Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。其次,Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而 Docker 只需要启动 10 个隔离的应用即可。具体说来, Docker 在如下几个方面具有较大的优势:

1.更快速的交付和部署

对开发和运维( devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后, 运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、 测试、部署的时间。

2.更高效的虚拟化

Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。

3.更轻松的迁移和扩展

Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。

4.更简单的管理

使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。

5.对比传统虚拟机总结

在这里插入图片描述

1.3 基本概念

1. 镜像(Image)

镜像,从认识上简单的来说,就是面向对象中的类,相当于一个模板。从本质上来说,镜像相当于一个文件系统。Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

2.容器(Container)

容器,从认识上来说,就是类创建的实例,就是依据镜像这个模板创建出来的实体。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。

3.仓库(Repository)

仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器( Registry)混为一谈,并不严格区分。 实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签( tag)。仓库分为公开仓库( Public)和私有仓库( Private) 两种形式。
最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。 国内的公开仓库包括 Docker Pool 等,可以提供大陆用户更稳定快速的访问。
当然,用户也可以在本地网络内创建一个私有仓库。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。

1.4 Docker安装

1. CentOS(7以上)

yum install docker
systemctl enable docker
systemctl start docker

2.Ubuntu

apt-get update
apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”
apt-get update
apt-cache madison docker-ce
#安装指定版
#apt-get install docker-ce=17.12.0ce-0ubuntu
#安装最新版
apt-get install docker-ce
systemctl enable docker
systemctl start docker

1.5 基础命令

docker info
docker version
docker search
docker pull 拉取镜像
docker run 运行容器
eg: docker run –it centos:latest /bin/bash
-i 表示启动一个可交互的容器
-t 表示让docker分配一个伪终端并绑定到容器的标准输入上,
Centos:latest 表示我们要运行得镜像
/bin/bash 表示我们启动容器的时候要运行得命令

docker images 列出所有镜像
docker ps 查看在运行得容器 docler ps –a 查看所有容器
docker stop/start/restart 容器停止启动重启
docker rmi 删除镜像
docker rm 删除容器
docker tag标记本地镜像,将其归入某一仓库

1.6 docker 搭建私有仓库

<1> 环境准备

环境:俩个装有docker的centos7.5的虚拟机
虚拟机一:192.168.2.117 docker私有仓库服务器
虚拟机二 : 192.168.2.29  运行docker服务的服务器

<2>私有仓库

docker pull registry	

在这里插入图片描述
在这里插入图片描述

<3>使用registry 启动私有仓库容器

mkdir –p /usr/local/registry
docker run -d -p 5000:5000 --name docker-registry -v /usr/local/registry:/tmp/registry registry
在这里插入图片描述
-d 表示后台模式运行
-p 5000:5000 表示将容器的5000端口映射到宿主机的5000端口
–name 表示为当前容器指定名称
-v 表示将宿主机的/usr/local/registry 挂载到容器/tmp/resgistry

容器正常启动,对外提供服务通过5000端口映射到docker-registry的5000端口;

执行命令curl http://127.0.0.1:5000/v2/_catalog,收到的响应如下,是个json对象,其中repositories对应的值是空的json数组,表示目前仓库里还没有镜像:
{“repositories”:[]}

<4>上传镜像

注释:正常情况下,应用服务器推送镜像到仓库用的是https,而我们通过命令行来推送用的是普通的http,所以需要修改docker的启动参数,使之允许以http协议工作
所以我们需要修改/etc/sysconfig/docker文件:
vim /etc/sysconfig/docker
OPTIONS=’–selinux-enabled --log-driver=journald --insecure-registry 192.168.95.130:5000’
systemctl daemon-reload
systemctl restart docker
然后启动registry
Docker start docker.io/registry

接着下载一个nginx镜像
Docker pull nginx
Docker images
在这里插入图片描述
如上图所示,这个镜像的ID是7042885a156a,所以我们执行以下命令,给这个镜像添加一个带有私有仓库IP的TAG,这样后面才能成功推送到私有仓库:
docker tag 7042885a156a 192.168.2.117:5000/nginx
再执行docker images查看镜像的信息,如下图,出现了一个新的镜像

Docker push 192.168.2.117:5000/nginx
查看私有仓库
curl http://192.168.2.117:5000/v2/_catalog

{“repositories”:[“nginx”]}
现在私有仓库搭建好,并且仓库里有一个nginx镜像

现在我们去另外一台服务器上使用这个私有仓库并下载该镜像.
首先还是修改配置文件/etc/sysconfig/docker

在这里插入图片描述
然后重启docker加载配置文件
Docker pull 192.168.2.117:5000/nginx

在这里插入图片描述
查看镜像
在这里插入图片描述
接着运行容器
Docker run –d -p 8080:80 --name nginx -v /feng/nginx/html/:/usr/share/nginx/html/ 192.168.2.117:5000/nginx

在这里插入图片描述

1.7 Dockerfile

介绍:Dockerfile 是一个由一堆命令+参数构成的脚本,使用 docker build 即可执行脚本构建镜像,自动的去做一些事,主要用于进行持续集成

1.7.1Docker语法介绍

<1>FROM:
1.FROM指定一个基础镜像, 一般情况下一个可用的 Dockerfile一定是 FROM 为第一个指令。至于image则可以是任何合理存在的image镜像。
2.FROM 一定是首个非注释指令 Dockerfile。
3.FROM 可以在一个 Dockerfile 中出现多次,以便于创建混合的images。
4.如果没有指定 tag ,latest 将会被指定为要使用的基础镜像版本。

<2>MAINTAINER:这里是用于指定镜像制作者的信息。

<3>RUN:用来修改镜像的命令,常用来安装库、程序以及配置程序。一条RUN指令执行完毕后,会在当前镜像上创建一个新的镜像层,接下来对的指令会在新的镜像上继续执行。

<4>ENV:
1.ENV指令可以用于为docker容器设置环境变量
2.ENV设置的环境变量,可以使用 docker inspect命令来查看。同时还可以使用docker run --env =来修改环境变量。

<5>WORKDIR: 为接下来执行的指令指定一个新的工作目录,这个目录可以使绝对目录,也可以是相对目录

<6>COPY:COPY 将文件从路径 复制添加到容器内部路径 。
必须是想对于源文件夹的一个文件或目录,也可以是一个远程的url, 是目标容器中的绝对路径。

<7>ADD:
ADD 将文件从路径 复制添加到容器内部路径 。
向新镜像中添加文件,这个文件可以是一个主机文件,也可以是一个网络文件,也可以使一个文件夹。
第一个参数:源文件(夹),如果是相对路径,它必须是相对于Dockerfile所在目录的相对路径。如果是URL,会先下载下来,再添加到镜像里去。
第二个参数:目标路径。如果源文件是主机上zip或者tar形式的压缩文件,Docker会先解压缩,然后将文件添加到镜像的指定位置。如果源文件是一个通过URL指定的网络压缩文件,则不会解压。

<8>VOLUME:创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。

<9>EXPOSE : 用来指明容器内进程对外开放的端口,多个端口之间使用空格隔开。

<10>CMD:用来设置启动容器时默认运行的命令

1.7.2.Dockerfile 构建实例

Dockerfile构建nginx
首先建立一个自己的目录
mkdir /feng
在里面放入nginx的tar包以及写好的Dockerfile 如下所示

在这里插入图片描述
Cat Dockerfile:
From docker.io/centos

MAINTAINER nginx fengyuhang

ENV PATH /usr/local/nginx/sbin:${PATH}

RUN useradd -M -s /sbin/nologin nginx

RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel

ADD nginx-1.14.2.tar.gz /usr/src/

WORKDIR /usr/src/nginx-1.14.2

RUN ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module && make && make install

–prefix=/usr/local/nginx \指定安装路径

–user --group \指定nginx的所有者,所属者

–with-http_stub_status_module \声明启用service status页,默认不启用

–with-http_ssl_module \启用ssl模块,以支持https请求

EXPOSE 80
CMD [“nginx”,”-g”,”deamon off;”]

然后开始构建镜像
Docker built -t nginxfeng(指定容器名字)
接着运行nginx镜像
docker run -d -p 81:80 --name test -v /feng/index.html:/usr/local/nginx/html/index.html nginxfeng
curl 127.0.0.1:81
在这里插入图片描述
可以看到访问nginx 返回的是我们制定的index.html 内容 说明nginx启动成功。

二、Kubernetes

2.1 Kubernetes介绍

Kubernetes是一个完备的分布式系统支撑平台。Kubernetes具有完备的集群管理能力,包括多层次的安全防护和准入机制/多租户应用支撑能力、透明的服务注册和服务发现机制、内建智能负载均衡器、强大的故障发现和自我修复功能、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制,以及多粒度的资源配额管理能力。同时kubernetes提供了完善的管理工具,这些工具覆盖了包括开发、测试部署、运维监控在内的各个环节;因此kubernetes是一个全新的基于容器技术的分布式架构解决方案,并且是一个一站式的完备的分布式系统开发和支撑平台。

2.2 Master介绍

Kubernetes 里的Master指的是集群控制节点,每个Kubernetes集群里需要有一个Master节点来负责整个集群的管理和控制,基本上Kubernetes所有的控制命令都发给它,它负责具体的执行过程,我们后面执行的所有命令基本上都是在Master节点上运行的。如果Master宕机或不可用,那么集群内容器的管理都将失效master节点上运行一些关键进程:
1)k8s API server(kube-apiserver),提供了HTTP Rest接口的关键服务进程,是所有资源的增删改查的唯一入口,也是集群集群控制的入口进程。kubectl的命令会调用到api server,来实现资源的增删查改。
2)kube-controller-manager,k8s所有资源对象的自动化控制中心。
3)kube-scheduler,pod调度进程。
4)另外往往还启动了一个etcd服务,因为k8s里所有资源对象的数据全部是保存在etcd中的,etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现。

在这里插入图片描述

2.3 Node介绍

除了Master,集群中其他机器被称为Node节点,每个Node都会被Master分配一些工作负载docker容器,当某个Node宕机时,其上的工作负载会被Master自动转移到其他节点上去。
每个Node节点上都运行着以下一组关键进程:
1)kubelet:负责Pod对应容器的创建、停止等任务,同时与Master节点密切协作,实现集群管理的基本功能
2)kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件。
3)Docker Engine(Docker):Docker引擎,负责本机的容器创建和管理工作。

在这里插入图片描述
查看当前nodes:kubectl get nodes
然后通过下面命令查看某个node的详细信息:kubectl describe node <node_name>

2.4 Kubernetes 中Master与Node工作内容

在集群管理方面,Kubernets将集群中的机器划分为一个Master节点和一群工作节点(Node),其中,在Master节点上运行着集群管理相关的一组进程kube-apiserver、kube-controller-manager和kube-scheduler,这些进程实现了整个集群的资源管理、Pod调度、弹性收缩、安全控制、系统监控和纠错等管理功能,并且都是全自动完成的。Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod。Node上运行着Kubernetes的kubelet、kube-proxy服务进程,这些服务进程负责Pod创建、启动、监控、重启、销毁、以及实现软件模式的负载均衡

在这里插入图片描述

2.5 Pod介绍

Pod是kubernetes最重要也最基本的概念,如图所示是Pod的组成示意图,我们看到每个Pod都有一个特殊的被称为“根容器”的Pause容器对应的镜像属于Kubernetes的平台的一部分,除了Pause容器,每个Pod还包含一个或多个紧密相关的用户业务容器。

在这里插入图片描述
每个pod由一个根容器的pause容器,其他是业务容器。
k8s为每个pod分配了唯一的IP地址,一个pod里的多个容器共享pod IP。

pod其实有两种类型:普通的pod和静态pod,后者比较特殊,它并不存放在etcd存储中,而是存放在某个具体的Node上的一个具体文件中,并且只在此Node上启动运行。而普通的pod一旦被创建,就会被放入etcd中存储。随后被master调度到某个具体的Node上并进行绑定,随后该pod被对应的Node上的kubelet进程实例化成一组相关的docker容器并启动起来。

每个pod都可以对其使用的服务器上的计算资源设置限额,当前可以设置限额的源有CPU和memory两种。其中CPU的资源单位为CPU的数量。

一般而言,一个CPU的配额已经算是相当大的一个资源配额,所以在k8s中,通常以千分之一的CPU配额为最小单位,以m来表示,通常一个容器的CPU配额为100-300m,即占用0.1-0.3个CPU。这个配额是个绝对值,不是占比。

在k8s中,一个计算资源进行配额限定需要设定两个参数:

requests,资源的最小申请量,系统必须满足要求

2.6 Label

一个label是一个key=value的键值组合,然后可以通过label selector(标签选择器)查询和筛选拥有某些label的资源对象。
(Label 相当于我们熟悉的标签,给某个资源对象定义一个Label,就相当于给它打了一个标签,随后可以通过Label Selector 标签选择器 查询和筛选有某些Label的资源对象。Kubernetes通过这种方式实现了类似SQL的简单又通用的对象查询机制)。

label的重要使用场景:
kube-controller进程通过资源对象RC上定义的label selector来筛选要监控的pod的数量,从而实现全自动控制流程。
kube-proxy进程通过service的label selector来选择对应的pod,自动建立起每个service到对应pod的请求转发路由表。从而实现service的智能负载均衡机制。

2.7 RC(Replication Controller)

当我们定义了一个RC并提交到Kubernetes集群中以后,Master节点上的Controller Manager组件就得到通知,定期巡检系统中当前存活的目标Pod,并确保目标Pod实力的数量刚好等于此RC的期望值,如果有过多的Pod副本在运行,系统就会停掉一些Pod,否则系统就会再自动创建一些Pod。 可以说,通过RC,Kubernetes实现了用户应用集群的高可用性,并大大减少了传统IT需要手动的工作
RC定义了如下
1.Pod期待的副本数(replicas)
2.用于筛选目标Pod的Label Seletcor(标签选择器)
3.当Pod的副本小于预期(replicas)时,用于创建新Pod的Pod模板(template)
删除RC并不会影响通过该RC已创建号的Pod。为了删除所有Pod,可以设置replicas的值为0,然后更新该RC。另外,kubectl提供了stop和delete命令来一次性删除RC和RC控制的全部Pod

2.8 HPA(horizontal Pod Autoscaler Pod横向自动扩容)

通过手动执行kubectl scale命令,可以通过RC实现pod扩容。

HPA,pod横向自动扩容,实现原理是通过追踪分析RC控制的所有目标Pod的负载变化情况,来确定是否需要针对性地挑战目标pod的副本数。

有两种方式作为pod负载的度量指标。

<1>CPU utilization percentage

<2>应用程序自定义的度量指标,比如服务在每秒内的相应的请求数。

CPU utilization percentage是一个算术平均值,目标pod所有副本自身的CPU利用率的平均值。一个Pod自身的CPU利用率是该Pod当前CPU使用量除以它的Pod request的值。比如当我们定义一个Pod的pod request为0.4,而当前pod的cpu使用量为0.2,则使用率为50%。如此可以得出一个平均值,如果某一个时刻CPU utilization percentage超过80%,则表示当前副本数不够,需要进行扩容.

2.9 service

Service是Kubernetes里最核心的资源对象之一,Service定义了一个服务的访问入口地址,前端的应用(Pod)通过这个入口地址访问其背后的一组由Pod副本组成的集群实力。 Service与其后端Pod副本集群之间则是通过Label Selector来实现"无缝对接"。而RC的作用实际上是保证Service 的服务能力和服务质量处于预期的标准

每个pod会被分配一个独立的IP地址,也就是每个pod都提供一个独立的endpoint(IP+port)以被访问,那多个pod如何被客户端访问呢,k8s通过运行在每个Node上的kube-proxy进程,负责将对service的请求转发到后端某个pod实例上,也就实现了类似负载均衡器的功能,至于具体转发到哪个pod,则由负载均衡器的算法所决定。并且service不是共用一个负载均衡器的IP地址,而是每一个service分配了一个全局唯一的虚拟IP,这样每个服务就变成了具有唯一IP的通信节点,服务调用也就变成了最为基础的TCP通信问题。

pod的Endpoint地址会随着Pod的销毁和重新创建而发生改变,因为新的Pod地址与之前的旧的Pod不同。而Service一旦被创建,Kubernetes就会自动为它分配一个可用的Cluster IP,而且在Service的整个声明周期内,它的Cluster IP不会发生改变。所以只要将Service的name与Service的Cluster IP地址做一个DNS域名映射即可解决问题。
k8s的服务发现机制:每个service都有一个唯一的cluster IP以及唯一的名字,而名字是由开发者自己定义的,部署的时候也没必要改变,所以完全可以固定在配置中,接下来的问题 就是如何通过service的名字找到对应的cluster IP。

外部系统访问service的问题:

k8s中有三种IP:
a,Node IP:node节点的IP地址
b,Pod IP:pod的IP地址
c,cluster IP:service IP

首先,Node IP是k8s集群中每个节点的物理网卡的IP地址,这是一个真实存在的物理网络,所有属于这个网络的服务器之间都能直接通信,不管属不属于k8s集群。这也表明了k8s集群之外的节点访问k8s集群之内的某个节点后者TCP/IP服务的时候,必须要通过Node IP通信。

其次,pod IP是每个Pod的IP地址,它是根据docker网桥的IP地址段进行分配的,通常是一个虚拟的二层网络,因此不同pod之间的通信就是通过Pod IP所在的虚拟二层网络进行通信的。而真实的TCP/IP流量则是通过Node IP所在的物理网卡流出的。

Cluster IP,它是一个虚拟IP,但更像是一个伪造的IP网络
(1)Cluster IP仅仅作用于Kubernetes Service对象,并由Kubernetes管理和分配IP地址(来源于Cluster IP地址池)
(2)Cluster IP无法被Ping,因为没有一个"实体网络对象"来响应
(3)在Kubernetes集群内,Node IP、Pod IP、Cluster IP之间的通信,采用的是Kubernetes自己设计的特殊路由规则

2.10 Volume 存储卷

Volume是pod中能够被多个容器访问的共同目录。也就是被定义在pod上,然后被一个pod中的多个容器挂载到具体的文件目录下,其次,volume与pod生命周期相同,但与容器生命周期不相关,当容器终止或重启,volume中的数据也不会丢失

2.11 namespace命名空间

大多数情况下用于实现多租户的资源隔离,namespace通过将集群内部的资源对象分配到不同的namespace中,形成逻辑上分组的不同项目、小组,便于不同的分组在共享使用整个集群的资源的同时还能被分别管理。

namespace的定义很简单,如下所示的yaml定义了名为development的namespace

apiVersion: v1

kind: Namespace

metadata:

name: development

一旦创建了Namespace,我们在创建资源对象时就可以指定这个资源对象属于哪个namespace,比如下面,定义了名为busybox的Pod,放入development这个namespace里:
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: development

2.12 kubernetes基础命令

kubectl get
kubectl get命令用来获取资源信息列表,可用来查看pod是否健康,当前的运行状态,重启了几次,生命周期等,是最常用的命令之一

kubectl get pod
获取pod资源列表,默认获取default命名空间

kubectl get pod -n kube-system
获取kube-system命名空间的pod资源列表

kubectl get pod --all-namespaces
获取所有命名空间的pod资源列表

kubectl get pod -n kube-system kube-apiserver-k8s-01
获取kube-system命名空间中指定的pod:kube-apiserver-k8s-01的信息
当查看某个具体的pod时,必须指明该pod所在的命名空间,像–all-namespaces参数是不能使用的

kubectl get pod -n kube-system kube-apiserver-k8s-01 -o wide
获取kube-system命名空间中指定的pod:kube-apiserver-k8s-01的信息,并且展示更多信息,包括pod ip,所在节点等信息

kubectl get pod -n kube-system kube-apiserver-k8s-01 -o yaml
获取kube-system命名空间中指定的pod:kube-apiserver-k8s-01的信息,并且以yaml格式展示pod详细信息

kubectl get pod -n kube-system kube-apiserver-k8s-01 -o json
获取kube-system命名空间中指定的pod:kube-apiserver-k8s-01的信息,并且以json格式展示pod详细信息

kubectl get pod --all-namespaces --watch
监控pod资源的变化

上述命令中的pod为kubernetes集群中的一种资源对象,其它资源对象,例如:deployment、deamonset、endpoint、ingress、services、secrets等等,都可以用get命令,全部的资源对象详见这里

kubectl describe
打印所选资源的详细描述信息,当pod启动异常的时候也可以用该命令排查问题

kubectl describe -n kube-system pod kube-apiserver-k8s-01
描述pod:kube-apiserver-k8s-01的详细信息

kubectl describe -n kube-system secrets kubernetes-dashboard-token-9mvxp
描述secrets详细信息,例如该命令可查询登录dashboard所需的token信息

kubectl exec
与docker exec命令一样,kubectl exec 也是用来进入容器内部的

kubectl exec -it -n kube-system kube-apiserver-k8s-01 sh
进入kube-system命名空间下的kube-apiserver-k8s-01容器内部
仅当pod内只有一个容器的时候适用

kubectl exec -it -n kube-system calico-node-rw4c2 -c install-cni sh
-it:开启虚拟终端tty,并将标准输入传入容器中
-i, --stdin=false: Pass stdin to the container
-t, --tty=false: Stdin is a TTY
当pod中有多个容器,需要进入指定的容器时适用,比上一条命令多了-c container_name

container_name可以通过kubectl describe命令获得
kubectl describe pod calico-node-rw4c2 -n kube-system | grep -B 1 “Container ID”

kubectl logs
kubectl logs用来查看容器的日志,在定位问题时非常有用
kubectl logs -n kube-system -f --tail 10 kube-apiserver-k8s-01
-f: 动态打印日志
–tail 10: 打印最后10行日志,不加该参数时默认会打印全部的日志,在日志非常多的时候非常有用

kubectl scale
kubectl scale用来对deployement、replicaset、statefulset等资源进行伸缩
kubectl scale deployment -n kube-system --replicas=2 kubernetes-dashboard
–replicas=2: 指定副本数量为2
先设置replicas=0,再设置replicas=1可实现pod重启操作

kubectl apply
通过传入文件名或者标准输入来创建资源或配置

kubectl apply -f .
创建或更新当前目录所有的yaml文件描述的配置或资源

kubectl apply -f /home/agms/
创建或更新指定目录所有的yaml文件描述的配置或资源

kubectl apply -f /home/agms/a.yaml
创建或更新指定yaml文件描述的配置或资源

kubectl delete
kubectl delete -f .
删除当前目录所有的yaml文件描述的配置或资源

kubectl delete -f /home/agms/
删除指定目录所有的yaml文件描述的配置或资源

kubectl delete -f /home/agms/a.yaml
删除指定yaml文件描述的配置或资源

kubectl delete nodes k8s-01
按照节点名删除集群中的节点(慎用)

kubectl explain*
列出受支持资源的字段、版本,各字段的描述、类型等,在编写yaml文件时非常有用

kubectl explain deployment.spec
描述deployment资源的spec字段

kubectl create
通过命令行创建kubernetes资源或配置信息

kubectl create namespace fpi-inc
创建一个fpi-inc的命名空间

一般建议通过kubectl apply的方式来进行资源或配置的创建

2.13 使用kubeadm自动搭建kubernetes集群

1 服务器准备

node host alias
Master 192.168.0.10 master
Node 192.168.0.11 Node

2 节点配置

配置节点别名、配置免秘钥登陆
#node1写master、node2写worker1(以后扩展多个节点)
nodeName=master
echo $nodeName > /etc/hostname
echo “192.168.0.10 node1 master” >> /etc/hosts
echo “192.168.0.11 node2 worker1” >> /etc/hosts
#此处所有会话都直接回车
ssh-keygen -t rsa
cd ~/.ssh
touch authorized_keys
#拷贝node1和node2的id_rsa.pub到authorized_keys(node1和node2的都拷贝进去,两个节点有相同的authorized_keys)
reboot

3 安装docker(前面已介绍)

4 安装kubeadmin、kubelet、kubectl

从阿里云镜像安装
CentOS / RHEL / Fedora
cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet
关闭swap
swapoff -a
sed -i ‘s/^(.swap.$)/#\1/’ /etc/fstab

5 安装ETCD集群

官网下载:https://github.com/etcd-io/etcd/releases
1.生成ssl安全证书(如果使用http协议,此步可略过)
curl -s -L -o cfssl https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
curl -s -L -o cfssljson https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
chmod +x cfssl cfssljson
cp cfssl cfssljson /usr/local/bin/
mkdir -p ~/ssl
cd ~/ssl
cat <ca-config.json
{
“signing”: {
“default”: {
“expiry”: “876000h”
},
“profiles”: {
“kubernetes”: {
“expiry”: “876000h”,
“usages”: [
“signing”,
“key encipherment”,
“server auth”,
“client auth”
]
}
}
}
}
EOF
cat <ca-csr.json
{
“CN”: “kubernetes”,
“key”: {
“algo”: “rsa”,
“size”: 2048
},
“names”: [
{
“C”: “CN”,
“ST”: “BeiJing”,
“L”: “BeiJing”,
“O”: “k8s”,
“OU”: “System”
}
],
“ca”: {
“expiry”: “87600h”
}
}
EOF
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
#生成ca-key.pem、ca.csr、ca.pem三个文件
cat <kubernetes-csr.json
{
“CN”: “kubernetes”,
“hosts”: [
“127.0.0.1”,
“192.168.0.10”,
“192.168.0.11”,
“10.244.0.1”,
“kubernetes”,
“kubernetes.default”,
“kubernetes.default.svc”,
“kubernetes.default.svc.cluster”,
“kubernetes.default.svc.cluster.local”
],
“key”: {
“algo”: “rsa”,
“size”: 2048
},
“names”: [
{
“C”: “CN”,
“ST”: “BeiJing”,
“L”: “BeiJing”,
“O”: “k8s”,
“OU”: “System”
}
]
}
EOF
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes
cp * /etc/kubernetes/ssl

2.安装etcd
tar xf etcd-v3.3.10-linux-amd64.tar.gz
cd etcd-v3.3.10-linux-amd64
cp etcd* /usr/local/bin/
mkdir -p /var/lib/etcd/

3.安装服务
vim /etc/systemd/system/ etcd.service

etcd.service如下所示,不同节点需要修改–name参数,以及监听本机ip:port,如果用http协议,可以不配置ssl安全证书
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
Documentation=https://github.com/coreos

[Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
ExecStart=/usr/local/bin/etcd
–name etcd0
–cert-file=/etc/kubernetes/ssl/kubernetes.pem
–key-file=/etc/kubernetes/ssl/kubernetes-key.pem
–peer-cert-file=/etc/kubernetes/ssl/kubernetes.pem
–peer-key-file=/etc/kubernetes/ssl/kubernetes-key.pem
–trusted-ca-file=/etc/kubernetes/ssl/ca.pem
–peer-trusted-ca-file=/etc/kubernetes/ssl/ca.pem
–initial-advertise-peer-urls “https://192.168.0.10:2380”
–listen-peer-urls “https://192.168.0.10:2380”
–listen-client-urls “https://192.168.0.10:2379,https://127.0.0.1:2379”
–advertise-client-urls “https://192.168.0.10:2379”
–initial-cluster-token “etcd-cluster”
–initial-cluster etcd0=https://192.168.0.10:2380,etcd1=https://192.168.0.11:2380
–initial-cluster-state new
–data-dir=/var/lib/etcd
Restart=on-failure
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

启动服务
systemctl daemon-reload
systemctl enable etcd
systemctl start etcd

查看健康状态
etcdctl --endpoints=https://192.168.0.10:2379 --ca-file=/etc/kubernetes/ssl/ca.pem cluster-health

6 初始化k8s集群

kubeadm init --config k8s_init.yaml
一个k8s初始化的文件如下所示,kubernetesVersion指定了初始化的版本,需要预先在所有节点上下载下来镜像并打上tag,不然会初始化不动(如果没有预先下载,会从官网下载,要翻墙的,可以从国外服务器上下载之后使用docker save、docker load把镜像保存成文件再载入)
k8s.gcr.io/kube-proxy-amd64 v1.10.3 4261d315109d 5 months ago 97.1 MB
k8s.gcr.io/kube-scheduler-amd64 v1.10.3 353b8f1d102e 5 months ago 50.4 MB
k8s.gcr.io/kube-controller-manager-amd64 v1.10.3 40c8d10b2d11 5 months ago 148 MB
k8s.gcr.io/kube-apiserver-amd64 v1.10.3 e03746fe22c3 5 months ago 225 MB
api:
advertiseAddress: 192.168.0.10
bindPort: 6443
controlPlaneEndpoint: “”
auditPolicy:
logDir: /var/log/kubernetes/audit
logMaxAge: 2
path: “”
authorizationModes:

  • Node
  • RBAC
    certificatesDir: /etc/kubernetes/pki
    cloudProvider: “”
    criSocket: /var/run/dockershim.sock
    etcd:
    endpoints:
    • https://192.168.0.10:2379
    • https://192.168.0.11:2379
      caFile: “/etc/kubernetes/ssl/ca.pem”
      certFile: “/etc/kubernetes/ssl/kubernetes.pem”
      keyFile: “/etc/kubernetes/ssl/kubernetes-key.pem”
      dataDir: “/var/lib/etcd”
      image: “”
      imageRepository: k8s.gcr.io
      kubeProxy:
      config:
      bindAddress: 0.0.0.0
      clientConnection:
      acceptContentTypes: “”
      burst: 10
      contentType: application/vnd.kubernetes.protobuf
      kubeconfig: /var/lib/kube-proxy/kubeconfig.conf
      qps: 5
      clusterCIDR: 10.244.0.0/16
      configSyncPeriod: 15m0s
      conntrack:
      max: null
      maxPerCore: 32768
      min: 131072
      tcpCloseWaitTimeout: 1h0m0s
      tcpEstablishedTimeout: 24h0m0s
      enableProfiling: false
      healthzBindAddress: 0.0.0.0:10256
      hostnameOverride: “”
      iptables:
      masqueradeAll: false
      masqueradeBit: 14
      minSyncPeriod: 0s
      syncPeriod: 30s
      ipvs:
      minSyncPeriod: 0s
      scheduler: “”
      syncPeriod: 30s
      metricsBindAddress: 127.0.0.1:10249
      mode: “”
      nodePortAddresses: null
      oomScoreAdj: -999
      portRange: “”
      resourceContainer: /kube-proxy
      udpIdleTimeout: 250ms
      kubeletConfiguration: {}
      kubernetesVersion: v1.10.3
      networking:
      dnsDomain: cluster.local
      podSubnet: 10.244.0.0/16
      serviceSubnet: 10.96.0.0/12
      nodeName: test1
      privilegedPods: false
      token: “”
      tokenGroups:
  • system:bootstrappers:kubeadm:default-node-token
    tokenTTL: 24h0m0s
    tokenUsages:
  • signing
  • authentication
    unifiedControlPlaneImage: “”

添加一个环境变量 export KUBECONFIG=/etc/kubernetes/admin.conf

初始化完毕后,根据提示执行以下命令:
root@k8s-master-01:/home/zcs# mkdir -p $HOME/.kube
root@k8s-master-01:/home/zcs# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
root@k8s-master-01:/home/zcs# sudo chown (idu):(id -u):(id -g) $HOME/.kube/config
根据提示在worker节点执行kubeadm join xxx命令,将worker节点加入集群
root@worker-01:~# kubeadm join 192.168.0.10:6443 --token 7odzio.v63p658llil3cij9 --discovery-token-ca-cert-hash

sha256:3ea30427d276996f214adba1794af4e37262cdfaa4326dac0c33534fd45a843d
[preflight] Running pre-flight checks.
[WARNING FileExisting-crictl]: crictl not found in system path
Suggestion: go get github.com/kubernetes-incubator/cri-tools/cmd/crictl
[preflight] Starting the kubelet service
[discovery] Trying to connect to API Server “192.168.0.10:6443”
[discovery] Created cluster-info discovery client, requesting info from “https://192.168.0.180:6443”
[discovery] Requesting info from “https://192.168.0.10:6443” again to validate TLS against the pinned public key
[discovery] Cluster info signature and contents are valid and TLS certificate validates against pinned roots, will use API Server “192.168.0.10:6443”
[discovery] Successfully established connection with API Server “192.168.1.10:6443”

This node has joined the cluster:

  • Certificate signing request was sent to master and a response
    was received.
  • The Kubelet was informed of the new secure connection details.
    Run ‘kubectl get nodes’ on the master to see this node join the cluster.
    后续新加入主机,而token过期,可用以下方式解决
    获取ca证书sha256编码hash值:
    openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed ‘s/.* //’

重新生成新的token
kubeadm token create
查看重新生成的token
kubeadm join --token aa78f6.8b4cafc8ed26c34f --discovery-token-ca-cert-hash sha256:0fd95a9bc67a7bf0ef42da968a0d55d92e52898ec37c971bd77ee501d845b538 172.16.6.79:6443 --skip-preflight-checks

7 尝试安装一个mysql服务

kubectl apply -f mysql.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-config
data:
custom.cnf: |
[mysqld]
default_storage_engine=innodb
lower_case_table_names=1
skip_name_resolve


apiVersion: v1
kind: ReplicationController
metadata:
name: mysql
spec:
replicas: 1
selector:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.7.20
name: mysql
resources:
limits:

cpu: “2”

        memory: 4Giports:- containerPort: 3306hostPort: 3306env:- name: MYSQL_ROOT_PASSWORDvalue: "abc2333"      volumeMounts:- name: mysql-data-volumemountPath: /var/lib/mysql- name: mysql-confmountPath: /etc/mysql/conf.d/- name: mysql-datemountPath: /etc/localtimevolumes:- name: mysql-data-volumehostPath:path: /home/docker/agms/mysql/data- name: mysql-confconfigMap:name: mysql-config- name: mysql-datehostPath:path: /etc/localtime

三 结束了

第一次写博客,排版有问题,希望大家多多见谅.

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 在码云建立仓库后,如何将通过微信开发者工具建立的小程序项目本地目录关联到仓库

    1 在码云上建立了新的仓库地址2 使用微信开发者工具在本地建立新的工程目录3 打开新的工程目录,进入git bash页面,使用git init 初始化项目4 接着git add .5 git commit -m 初始化项目6 git remote add origin <码云仓库地址>7 git push -u origin master …...

    2024/5/1 11:06:51
  2. 如何在AxureRP7中使用FontAwesome字体

    我们使用Axure制作原型时,经常会使用到各种小图标。有些朋友自己制作、有些到网上下载,然后使用截图导入到Axure中使用。这样做非常繁琐,有些朋友问Axure是否能够像图像处理工具那样便捷灵活滴使用图标字体呢?答案是:可以!在AxureRP7中使用FontAwesome字体,这是一个非常…...

    2024/5/1 8:35:50
  3. js处理得到的值怎么跟随form表单提交到servlet后台

    案例: 背景:通过js获取select被选中的值,但是js处理得到的值ss是需要跟随form表单提交到servlet后台 我在jsp某个位置;但是这个input要在form表单里面;display: block;可以看见的 display: none;隐藏起来 在获取值的时候把display: block;看获取的值对不对; 确认正确已经…...

    2024/5/1 13:21:00
  4. k8s基础概念

    参考文档:官网文档 中文文档1 核心组件k8s集群示意图master节点1.1 etcd(数据库)作为apiServer的数据库,保存了整个集群所有资源的状态1.2 kube-apiserver(暴露k8s资源api的服务)apiServer实现了k8s的所有资源(Node/Pod/RC/Service等)的restful接口,可以通过 http请求 或…...

    2024/5/1 18:09:45
  5. 学生信息管理系统(GUI)

    数据库的内容:GUI界面:代码:StudentManagerment.javapackage 学生基本信息;import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;import javax.swing.*; import java.sql.*; public class StudentManagement extends JFrame imple…...

    2024/4/27 21:47:28
  6. 微信小程序之 开发者工具下载及使用

    https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 找到下载----选择稳定版本—选择windows64 APPID : 登录https://mp.weixin.qq.com(微信公众平台)----开发----开发者设置—找到id一栏复制 粘贴至APPID...

    2024/5/1 9:02:17
  7. ajax(原生JavaScript)异步提交表单数据

    采用ajax异步方式,通过js获取form中所有input、select等组件的值,将这些值组成Json格式,通过异步的方式与服务器端进行交互, 一般将表单数据传送给服务器端,服务器端处理数据并返回结果信息等 <html> <head></head> <body><form id="regi…...

    2024/5/1 12:45:10
  8. axure实用教程 2,窗口

    http://www.pexue.com一,母版窗口masters1,特点:可复用:一个母板可以同时添加到多个页面中。易维护:编辑母板页面,所有使用母板的页面全部更新 2,部件与母版的区别部件在每个页面都存在,母版只有在当前页面中存在3,新建一个母版 a,设置母版行为 (drop behavior) 任何地方行为…...

    2024/4/18 2:27:43
  9. K8S进入容器方法

    一、下面列出如何进入正在运行的k8s容器1234567891011<1>kubectl get pods #查看所有正在运行的podNAME READY STATUS RESTARTS AGEnginx-56b8c64cb4-t97vb 1/1 Running 3 1d<2>➜ ~ kubectl ex…...

    2024/5/1 6:30:22
  10. 微信开发者工具button,input鼠标点击坐标偏移

    问题是这样的,今天微信小程序开发中遇到点击button按钮没反应,要点按钮左上方一点点才能点击到input输入框也是上网查了好久才知道这是因为win10的屏幕的缩放造成的问题解决了,哈哈哈...

    2024/5/1 12:42:52
  11. 干货分享:手游运营活动如何提升收入

    游戏运营活动是根据产品所处的生存环境做出的弹性化产品应对策略,以实现调整游戏数据、提升收入的目的。有人称,对手游而言,运营活动就像吸毒,吸的时候非常爽,但吸过后容易上瘾且有后遗症。这个说法未免太因噎废食了,运营活动确有杀鸡取卵的阵痛,但手游的生存恰恰需要运…...

    2024/5/1 15:06:20
  12. 利用c++实现简单的学生信息管理系统

    一、问题描述 对给定例子的学生信息管理系统代码进行修改,要求完成以下基本任务: 1.改写程序为良好程序风格(文档注释,函数注释,语句注释)。 2.将功能补充完全(基于文件处理,完成刷新和保存功能)。 3.将学生信息改为更好的数据组织,而非离散形式(结构体)。 提高要求…...

    2024/5/1 5:48:50
  13. 如何在K8S上玩转TensorFlow ?

    女主宣言 该文章出自于ADDOPS团队,是关于如何在K8S上玩转tensorflow的主题,该文章深入浅出的给我们介绍了当前tensorflow的现状和架构特点等,然后介绍了让tensorflow如何基于k8s快速落地,让大家都能简单的上手tensorflow,整体文章脉络清晰,内容适度,所以希望能给大家带来…...

    2024/5/1 5:35:35
  14. axure新手入门教程

    首先做个声明:此次教程里为了快速完成,借用了一些网上已有教程的图文,不是剽窃,只图方便。另外,因为汉化版本可能功能名称等略有差别,请自行理解。 名词解释: 线框图:一般就是指产品原型,比如:把线框图尽快画出来和把原型尽快做出来是一个意思。 axure元件:也叫axur…...

    2024/4/22 5:40:57
  15. form表单提交 java后台回调 js

    jsp中的写法:<iframe id="registerIframe" name="registerIframe" src="" style="display: none"></iframe> <form name="form" method="post" id="submitForm" enctype="multipar…...

    2024/4/20 8:14:24
  16. 如何获取微信开发者id及设置微信授权目录

    在调用微信公众号支付时,一般需要配置开发者ID及配置微信授权目录,以下为开发者ID获取位置及授权目录配置位置1、获取微信开发者ID:登录微信公众平台,在“开发”模块,点击“基本配置”,即可以看下对应的开发者ID;2、微信授权目录配置点击“微信支付”模块,打开“开发配置…...

    2024/4/20 3:55:35
  17. 沙城天下--ios技术支持

    游戏:沙城天下:激情攻沙游戏类型:动作角色扮演描述:这是一款经典传奇手游,游戏延续1.76的经典设定,战法道三大经典职业,让你携兄弟傲战天下!更可实时多人PK,再战经典万人攻沙,处处皆战场,帮你成就真男人团战梦想!酷炫技能、霸气称号,城主头衔尽显至上荣誉,让你战力…...

    2024/4/18 2:17:37
  18. jQuery控制form表单提交无效

    $(form).submit() 无效查看form表单内部 是否有submit属性的button 如果有的话 jQuery是无法提交表单的 尝试改成type=button 用onclick事件触发表单提交 这是一个小坑...

    2024/4/18 2:19:37
  19. k8s介绍及与docker搭建集群

    一、Kubernetes系列之介绍篇 •Kubernetes介绍1.背景介绍  云计算飞速发展    - IaaS    - PaaS    - SaaS  Docker技术突飞猛进    - 一次构建,到处运行    - 容器的快速轻量    - 完整的生态环境2.什么是kubernetes  首先,他是一个全新的基于…...

    2024/4/19 0:05:24
  20. Axure RP 在线教程

    学习Axure RP助手http://cn.userxper.com/axure转载于:https://www.cnblogs.com/fry927/archive/2011/03/14/1983614.html...

    2024/4/18 2:24:49

最新文章

  1. 哈希(hash)函数

    本文已收录至《全国计算机等级考试——信息 安全技术》专栏 哈希函数&#xff0c;也称为散列函数 或杂凑函数&#xff0c;指将哈希表中元素的关键键值映射为元素存储位置的函数。是一种将任意长度的数据映射到固定长度输出的函数。哈希函数的特点包括压缩性&#xff0c;即输入数…...

    2024/5/1 19:04:31
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. ssm框架中各层级介绍

    1、Spring&#xff08;业务逻辑层&#xff09;&#xff1a; Spring框架提供了依赖注入&#xff08;DI&#xff09;和面向切面编程&#xff08;AOP&#xff09;等功能&#xff0c;可以帮助管理Java应用程序中的对象依赖关系和提供横切关注点的支持。 在SSM框架中&#xff0c;S…...

    2024/4/30 2:49:54
  4. Mac brew 安装软件

    Mac brew 安装软件 homebrew 速度慢 将brew 切换到国内镜像源 # 速度一般 # 步骤一 cd "$(brew --repo)" git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git# 步骤二 cd "$(brew --repo)/Library/Taps/homebrew/homebr…...

    2024/4/30 3:19:50
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/30 18:14:14
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/30 18:21:48
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/30 9:43:22
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57