一、Docker容器
1、Docker介绍
(1)Docker的介绍
- Docker是一种容器技术。
- 容器是什么-容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。
- 开发在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。
(2)Docker的由来
- 容器来源于集装箱,二者的英文都是Container,集装箱解决了运输的难题。
- Docker的中文意思是码头工人。
- Docker的图标是集装箱。
(3)容器 VS 虚拟机
(4)Docker的特点
- Docker的特点:轻量级、可移植、资源占用少。
- 对于开发人员-Build Once,Run Anywhere。
- 对于运维人员-Configure Once,Run Anything。
2、Docker安装配置
(1)Docker安装
- apt-get update
- apt-get install -y docker.io
(2)Docker配置
- 阿里云加速器配置(https://cr.console.aliyun.com/)
3、Docker基本使用
(1)Docker基本使用
docker pull mysql:5.6
docker run -p 3306:3306 --name mymysql -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
(2)Docker架构
(3)Docker基本概念
- 镜像(image)、容器(container)、仓库(registry)。
- 仓库分公有和私有两种。Docker hub是默认的仓库。
docker pull nginx
docker rmi nginx
(4)Docker基本使用
- 版本查看、镜像拉取、镜像查询、镜像删除。
- 容器运行、端口映射、挂存储卷、进入容器、查看容器日志、查询容器、设置环境变量、容器停止、容器删除。
- 仓库登录。
- 镜像构建、镜像打tag、镜像推送。
- Dockerfile基本语法(FROM、RUN、CMD/ENTRYPOINT、EXPOSE)
docker run -p 3306:3306 --name mymysql -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
docker logs -f ce5307fc90b6
docker ps -a
docker stop ce5307fc90b6
docker rm ce5307fc90b6
docker push myregistry/mymysql:1.0
二、必知必会的K8s
1、k8s介绍
Kubectl cerate -f test.yaml Kubectl apply -f /root/kube.yaml kubectl get services --all-namespaces
- 基于容器技术的分布式架构领先方案。它是google严格保密十几年的秘密武器-Borg的一个开源版本。
- Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。
2、k8s能做什么
- 容器的自动化复制和部署。随时扩展或收缩容器规模,并提供负载均衡。
- 方便地容器升级。
- 提供容器弹性,如果失效就替换它。
K8s对于测试能做什么
- 测试服务器的集中化、自动化管理。将各种平台的服务器加入集群,按需部署或销毁。
- 持续集成时方便地自动部署。
k8s架构
k8s基本概念
- Master是主服务器,node是用于部署应用容器的服务器。
- Pod基本操作单元,也是应用运行的载体。整个Kubernetes系统都是围绕着Pod展开的,比如如何部署运行Pod、如何保证Pod的数量、如何访问Pod等。
- Deployment定义了pod部署的信息。
- 若干个pod副本组成一个service,对外提供服务。
- 副本是指一个pod的多个实例。
- Namespace用于多租户的资源隔离。在测试环境中可以根据namespace划分成多套测试环境。默认有2个namespace:kubu-system/default
k8s调度过程
- Kubernetes Client将请求发送给API server。
- API Server根据请求的类型,将处理的结果存入高可用键值存储系统Etcd中。
- Scheduler将未分发的Pod绑定(bind)到可用的Nod节点上,存到etcd中。
- Controller Manager根据etcd中的信息,调用node中的kubelet创建pod。
- Controller Manager监控pod的运行状况并确保运行正常。
3、k8s的安装
k8s安装前的准备
准备ke xue上网。在主机上安装,并配好服务器(服务器地址、密码需要自己想办法哦)
k8s安装说明
- 2台主机上都要安装docker。
- 2台主机上都要安装kubeadm、kubelet和kubectl。
- 2台主机上都要禁用虚拟内存。
k8s安装以及配置
安装kubeadm,kubelet和kubectl(一)
apt-get update && apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF apt-get update && apt-get install -y kubelet kubeadm kubectl apt-mark hold kubelet kubeadm kubectl
注意:curl如果连不上,则需要设置一下ke xue上网:export http_proxy=10.10.10.94:1087 && export https_proxy=10.10.10.94.1087
操作步骤
在ubuntu主机上:
swapoff -a apt-get install apt-transport-https apt-get install curl
在ubuntu-node主机上:
swappff -a apt-get update apt-get install -y apt-transport-https apt-get install -y curl
4、k8s的设置ke xue上网
vim /etc/apt/source.list.d/kubernetes.list export http_proxy=192.168.0.186:1087 && export https_proxy=192.168.0.186:1087 echo $http_proxy curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb http://apt.kubernetes.io/ kubernetes-xenial main EOF
5、k8s配置
vim apt_proxy_conf
apt-get -c apt_proxy_conf update
apt-get -c apt_proxy_conf install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
安装kubeadm、kubelet和kubectl(二)
Apt安装这3个东东时,可能需要FQ。AptFQ安装使用如下方式:
初始化master(一)
- swapoff -a (禁用虚拟内存)
- kubeadm init --pod-network-cidr=10.244.0.0/16
注意:这一步因为连不上Google的镜像库,会导致失败。记录下载失败的镜像,下一页中会告诉大家如何处理。
6、k8s初始化master
kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU
注意:这一步因为连不上Google的镜像库,会导致失败。记录下载失败的镜像,下一页中会告诉大家如何处理。
初始化master(二)
- 可以从keveon或mirrorgooglecontainers镜像库中下载,当其中一个镜像库找不到时,尝试另外一个。
- 再手工设置tag。
7、k8s安装和配置
docker pull mirrorgooglecontainers/kube-apiserver:v1.13.2 docker tag mirrorgooglecontainers/kube-apiserver:v1.13.2 k8s.gcr.ioi/kube-apiserver:v1.13.2 docker images | grep kube-apiserver docker rmi mirrorgooglecontainers/kube-apiserver:v1.13.2
docker pull mirrorgooglecontainers/kube-controller-manager:v1.13.2 docker tag mirrorgooglecontainers/kube-controller-manager:v1.13.2 k8s.gcr.ioi/kube-controller-manager:v1.13.2 docker rmi mirrorgooglecontainers/kube-controller-manager:v1.13.2 docker images | grep kube-controller
docker pull mirrorgooglecontainers/kube-scheduler:v1.13.2 docker tag mirrorgooglecontainers/kube-scheduler:v1.13.2 k8s.gcr.ioi/kube-scheduler:v1.13.2 docker rmi mirrorgooglecontainers/kube-scheduler:v1.13.2 docker images | grep kube-scheduler
docker pull mirrorgooglecontainers/kube-proxy:v1.13.2 docker tag mirrorgooglecontainers/kube-proxy:v1.13.2 k8s.gcr.ioi/kube-proxy:v1.13.2 docker rmi mirrorgooglecontainers/kube-proxy:v1.13.2 docker images | grep kube-proxy
docker pull mirrorgooglecontainers/pause:3.1 docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.ioi/pause:3.1 docker rmi mirrorgooglecontainers/pause:3.1 docker images | grep pause
docker pull mirrorgooglecontainers/etcd:3.2.24 docker tag mirrorgooglecontainers/etcd:3.2.24 k8s.gcr.ioi/etcd:3.2.24 docker rmi mirrorgooglecontainers/etcd:3.2.24 docker images | grep etcd
docker pull keveon/coredns:1.2.6 docker tag keveon/coredns:1.2.6 k8s.gcr.ioi/coredns:1.2.6 docker rmi keveon/coredns:1.2.6 docker images | grep coredns
初始化master(三)
- 重新执行kubeadm init --pod-network-cidr=10.244.0.0/16。
- 记录下最后一条kubeadm join命令。
kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU
初始化master(四)
- mkdir -p $HOME/.kube
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
8、k8s安装网络插件
安装网络插件(只在master上执行)(一)
- sysctl net.bridge.bridge-nf-call-iptables=1
- curl -O https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml
安装网络插件(只在master上执行)(二)
- 修改kube-flannel.ym文件,增加下图中红色的部分。
- kubectl apply -f kube-flannel.yml
添加node(只在node上执行)
- 将之前记录下来的kubeadm join 命令执行。
- swapoff -a
- sysctl net.bridge.bridge-nf-call-iptables=1
k8s检查安装配置
- 检查node是否ready:kubectl get node
- 检查所有pod是否正常:kubectl get pod --all-namespaces -o wide
9、k8s安装异常处理
- 在node上执行kubeadm reset可以断开node,然后重新join。
- 在master上执行kubeadm reset后可以重新init。
- 重新启动后,要执行如下命令:
- swapoff -a
- systemctl daemon-reload
- systemctl restart kubelet
10、k8s基本使用
k8s基本使用-Deployment创建、删除
- kubectl create -f test.yaml
- kubectl delete -f test.yaml
k8s基本使用-Service创建及查看
- kubectl create -f test.yaml
- kubectl get service --all-namespaces
k8s基本使用-Pod查看、删除
- kubectl get pod --all-namespaces -o wide
- kubectl describe pod xxxxxx -n kube-system
- kubectl delete pod xxxxxx -n kube-system
三、持续集成与Jenkins
1、持续集成
- 持续集成(CI)是一种软件开发实践。
- 团队开发成员经常集成他们的工作,每个成员每天至少集成一次。
- 每天可能会发生多次集成。
- 每次集成都通过自动化的构建(包括编译、打包、部署、自动化测试)来验证。
- 从而尽早地发现集成错误。
持续集成过程
持续集成优势
- 快速集成、快速反馈、快速解决。
- 团队信心更强。
- 发布效率更高
2、Jenkins介绍
- 持续集成工具
- 任务调度平台
3、Jenkins安装以及配置
Jenkins安装
- jdk安装以及配置环境变量
- tomcat下载并解压
- jenkins war包下载,并放到tomcat的app目录,启动tomcat。
jenkins服务器安装
- 安装git
- 安装maven
- 修改maven镜像,使用阿里云镜像,修改maven的conf目录下的settings.xml文件。
jenkins配置
- 浏览器访问Jenkins url:xxx.xxx.xxx.xxx:8080/jenkins
- 按提示创建用户
- 按提示安装插件:ssh/publish over ssh/git parameter/Maven Integration
Jenkins配置
- Jenkins全局工具配置,配置jdk/git/maven
四、Jenkins+k8s发布实例
1、Jenkins+k8s发布实例
2、registry安装配置和使用
Registry安装配置
- docker pull registry
- docker run -p 5000:5000 -v /home/registry_images:/var/lib/registry -d registry
Registry使用
- 修改/etc/docker/daemon.json文件
- docker pull nginx
- docker tag nginx 10.10.10.71:5000/nginx:test
- docker pull 10.10.10.71:5000/nginx:test
3、Jenkins项目创建与配置
Jenkins项目创建
- 创建maven项目
- 设置参数化构建
- Jenkins项目配置-设置代码源
当前使用的是github上的一个public项目,你也可以使用
- 设置maven构建命令
- 设置构建后操作,将jar包打包成docker镜像,并推送registry
注意:对应脚本要放到对应目录。
4、Jenkins项目构建
Jenkins项目配置
- 设置jenkins服务器到k8s master ssh 免密登录
- 设置构建后操作,将yaml文件拷贝到k8s master上并运行应用。
Jenkins项目构建-参数化构建
Jenkins查看日志
jenkins访问验证
- 浏览器访问任一node的IP加上nodePort。
总结
- Registry安装配置和使用(使用docker安装)
- Jenkins项目创建与配置
- Jenkins项目构建
来源:慕课网免费课程地址:http://www.imooc.com/learn/1112