docker/k8s/jenkins/持续集成

docker

docker是一种容器技术

是一种轻量级,可移植,自包含打包的软件技术

特点

轻量级,可移植,资源占用少

对开发人员:build once run anywhere

对测试运维:config once run anything

docker跟虚拟机的区别

虚拟机需要硬件软件,需要内存资源,docker不需要硬件和软件,共享宿主机的资源

docker使用

apt-get update

apt-get install -y docker.io

  1. 阿里云加速器配置(https://cr.console.aliyun.com/

  1. sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker

  1. docker pull mysql:5.6

  1. docker run -p 3306:3306 --name mymysql -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

  1. 镜像[image]、容器【container】、仓库【registry】

  1. 仓库分公有和私有的两种。Docker hub是默认的仓库【https://hub.docker.com/search?q=mysql&type=image】。

  1. 版本查看:docker version

  1. 镜像拉取: docker pull image-name

  1. 镜像查看:docker images docker image ls

  1. 镜像删除

  1. docker pull nginx

  1. docker images

  1. docker rmi nginx

  1. 容器运行、端口映射、挂存储卷

  1. docker run -p 3306:3306 --name mymysql -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.

  1. 容器: docker exec -it container-id /bin/bash

  1. 查看容器日志 :

  1. 进入容器后,查看日志

  1. docker logs -f container-id

  1. 查询容器 : 正在运行的容器 docker ps

  1. 所有的容器 docker ps -a

  1. 设置环境变量

  1. 容器停止: docker stop container-id

  1. 容器删除: docker rm container-id

k8s
特点

支持自动化部署、大规模可伸缩、应用容器化管理

安装

翻墙:配置科学上网 shadowsocks,并配置好服务器(账号和密码自己搞定哟)

2台主机都要安装docker(自行安装)

2台主机都需要安装kubeadm,kubelet,kubectl

命令1:apt-get update && apt-get install -y apt-transport-https curl

可能会用到:科学设置上网:打开shadowsocks,查看(http代理设置中)它在那个端口上1087),查看本机ip(ipconfig |grep 192.168.0),设置暴露代理服务端口:export http_proxy=192.168.0.186:1087 && export http_proxy=192.168.0.186:1087,检查是否设置成功:echo $http_proxy 打印出:192.168.0.186:1087

命令2:curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

命令3:cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main EOF

创建一个文件,(例如:apt_proxy_conf)文件里面内容 宿主机的ip和shadowsocks的端口

命令4:apt-get -c apt_proxy_conf update (-c apt_proxy_conf)指向当前文件

命令5:apt-get -c apt_proxy_conf install -y kubelet kubeadm kubectl

2台主机上都需要禁用虚拟内存

初始化master(1)

禁用虚拟内存命令:swapoff -a

kubeadm init --pod-network-cidr=10.244.0.0/16

初始化master(2)

镜像下载失败可以从keveon或者mirrorgooglecontainers镜像库中下载,在手工设置tag

1,下载镜像:docker pull mirrorgooglecontainers/kube-apiserver:v1.13.2

修改tag:docker tag mirrorgooglecontainers/kube-apiserver:v1.13.2 k8s.gcl.io/kube-apiserver:v1.13.2

检查镜像:docker images |grep kube-apiserver:v1.13.2

删除旧镜像:docker rmi mirrorgooglecontainers/kube-apiserver

2,下载镜像:docker pull mirrorgooglecontainers/kube-controller-manager:v1.13.2

修改tag:docker tag mirrorgooglecontainers/kube-controller-manager k8s.gcl.io/kube-controller-manage:v1.13.2

检查镜像:docker images |grep kube-controller-manager

删除旧镜像:docker pull mirrorgooglecontainers/kube-controller-manager:v1.13.2

3,下载镜像:docker pull mirrorgooglecontainers/kube-scheduler:v1.13.2

修改tag:docker tag mirrorgooglecontainers/kube-scheduler k8s.gcl.io/kube-scheduler:v1.13.2

检查镜像:docker images |grep kube-scheduler:v1.13.2

删除旧镜像:docker pull mirrorgooglecontainers/kube-scheduler

4,下载镜像:docker pull mirrorgooglecontainers/kube-proxy:v1.13.2

修改tag:docker tag mirrorgooglecontainers/kube-proxy k8s.gcl.io/kube-proxy:v1.13.2

检查镜像:docker images |grep kube-proxy:v1.13.2

删除旧镜像:docker pull mirrorgooglecontainers/kube-proxy

5,下载镜像:docker pull mirrorgooglecontainers/pause:3.1

修改tag:docker tag mirrorgooglecontainers/pause:3.1 k8s.gcl.io/kube-proxy:pause:3.1

检查镜像:docker images |grep pause

删除旧镜像:docker pull mirrorgooglecontainers/pause

6,下载镜像:docker pull mirrorgooglecontainers/etcd:3.2.24

修改tag:docker tag mirrorgooglecontainers/etcd:3.2.24 k8s.gcl.io/kube-proxy:etcd:3.2.24

检查镜像:docker images |grep etcd

删除旧镜像:docker pull mirrorgooglecontainers/etcd

7,下载镜像:docker pull keveon/coredns:1.2.6

修改tag:docker tag keveon/coredns:1.2.6 k8s.gcl.io/coredns:1.2.6

检查镜像:docker images |grep coredns

删除旧镜像:docker pull keveon/coredns

初始化master(3)

1,重新执行kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-error=NumCPU

2、记录下最后一条kubeadm join命令,我记录的信息如下:

kubeadm join 192.168.150.20:6443 --token v0c13b.foa68xh8qjtbygyt \

--discovery-token-ca-cert-hash sha256:4521a13c88cc80a662361163d506c9d91f5fa8303106c82baff439f80c6c3f4a

初始化master(4)

1、mkdir -p $HOME/.kube

2、cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

3、chown $(id -u):$(id -g) $HOME/.kube/config

安装网络插件(只在master上执行)

1、sysctl net.bridge.bridge-nf-call-iptables=1

2、curl -O https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml

(注:第2条命令执行前貌似需要先登录GitHub 例如:根据提示,这边的地址是:https://github.com/coreos/flannel/blob/master/Documentation/kube-flannel.yml

3、kube-flannel.yml文件新加内容

- key: node.kubernetes.io/not-ready

operator: Exists

effect: NoSchedule

4、kubectl apply -f kube-flannel.yml

添加node(只在node上执行)

1、swapoff -a

2、将之前记录下来的kubeadm join命令执行

  1. sysctl net.bridge.bridge-nf-call-iptables=1

k8s检查安装配置

1、检查node是否ready:kubectl get node

2、检查所有pod是否正常:kubectl get pod --all-namespaces -o wide

提示:如果pod处于非running状态,则查看该pod: kubectl describe pod xxx -n kube-system,有可能是因为镜像无法下载,导致镜像启动失败,如果是,手动在node上执行 pull images,然后在master上删掉该pod,k8s会自动重新调度pod,删除pod命令:kubectl delete pod xxx -n kube-system

k8s异常处理

1、在node上执行kubeadm reset可以断开node,然后重新join

2、在master上执行kubeadm reset后可以重新init

3、重新启动后,要执行如下命令

(1)#swapoff -a

(2)#systemctl daemon-reload

(3)#systemctl restart kubelet

k8s基本使用-Deployment创建,删除 (maven-deployment)

查看: kubectl get deployments --all-namespaces

删除:kubectl delete -f /root/kube.yaml

创建:kubectl apply -f /root/kube.yaml

k8s基本使用-Service创建,查看(maven-deployment)

查看: kubectl get service --all-namespaces

创建:kubectl create -f /root/test.yaml

k8s基本使用-Pod查看,删除 (maven-deployment)

查看:kubectl get po --all-namespaces -o wide

查看详细详细:kubectl describe pod xxx -n default

删除:kubectl delete pod xxx -n kube-system

持续集成(CI)
介绍

持续集成是一种敏捷软件技术

团队人员把自己的工作经常集成起来,每个人每天最少集成一次

每天可能发生多次集成

每次集成都通过自动化集成(编译,打包,部署,自动化测试)来验证

从而尽早的发现问题

持续集成的过程

持续集成过程

1、提交代码(程序员)

2、人工/定时触发(一般是定时出发)

3、自动构建

4、自动部署

5、构建成功

6、获取构建环境信息

7、邮件通知(通知测试人员测试环境,通知开发人员测试结果)

8、自动化测试

9、构建失败

10、邮件通知

持续集成优势

1、快速集成、快速反馈、快速解决

2、团队信心更强

3、发布效率更高

jenkins(持续集成工具)
jenkins介绍

Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。

Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。

jenkins安装配置

1、jdk安装及配置环境变量(/etc/profile)

2、tomcat下载并解压

3、jenkins war包下载 放在tomcat目录下 启动tomcat(进入tomcat/bin 执行sartxxx.sh)

4、ip-a 浏览器中访问:xx.xx.xx.xx:8080/jenkins

5、jenkins会得到一个目录,去目录寻找到,输入到下面input框

6、安装git

7、安装maven及配置环境变量

8、修改maven镜像,使用阿里云镜像,修改maven的conf目录下的settings.xml文件

jenkins配置

浏览器中访问:xx.xx.xx.xx:8080/jenkins

按提示创建用户

按提示安装插件:ssh/publish over ssh/git parameter/Maven Integration plugin

在jenkins中全局工具配置git/jdk/maven

持续集成+k8s发布分析

Registry安装配置(master和node都要操作)

1、docker pull registry

2、docker run -p 5000:5000 -v /home/registry_images::var/lib/registry -d registry

3、修改/etc/docker/daemon.json文件

vim /etc/docker/daemon.json

xx.xx.xx.xx:5000

systemctl daemon_reload

systemctl start docker

docker pull nginx

docker tag nginx xx.xx.xx.xx:5000/nginx:test

docker push nginx xx.xx.xx.xx:5000/nginx:test

jenkins的创建

在机器上启动tomcat—>jenkins—>所有—>创建一个maven的项目->配置参数->设置参数化配置(get parameter用于选择一个分支)->设置源代码(可以使用github上的项目)->git(github的代码)->设置maven的命令->设置构建后,将会打包成一个jar包,把他上传到registry(仓库)

jenkins项目设置

设置jenkins服务器到master节点的免密,(ssh)

在jenkisn服务器上执行 ssh-keygen -t rsa

(admin下的密钥是在、/home/admin/.ssh/rsaxxxx.id,root的密钥在/root/.ssh/rsaxxx.id)

设置构建后操作,将yaml文件拷贝到k8smaster上并运行

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值