docker
docker是一种容器技术
是一种轻量级,可移植,自包含打包的软件技术
特点
轻量级,可移植,资源占用少
对开发人员:build once run anywhere
对测试运维:config once run anything
docker跟虚拟机的区别
虚拟机需要硬件软件,需要内存资源,docker不需要硬件和软件,共享宿主机的资源
docker使用
apt-get update
apt-get install -y docker.io
阿里云加速器配置(https://cr.console.aliyun.com/)
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
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
镜像[image]、容器【container】、仓库【registry】
仓库分公有和私有的两种。Docker hub是默认的仓库【https://hub.docker.com/search?q=mysql&type=image】。
版本查看:docker version
镜像拉取: docker pull image-name
镜像查看:docker images docker image ls
镜像删除
docker pull nginx
docker images
docker rmi nginx
容器运行、端口映射、挂存储卷
docker run -p 3306:3306 --name mymysql -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.
容器: docker exec -it container-id /bin/bash
查看容器日志 :
进入容器后,查看日志
docker logs -f container-id
查询容器 : 正在运行的容器 docker ps
所有的容器 docker ps -a
设置环境变量
容器停止: docker stop container-id
容器删除: 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命令执行
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上并运行