Theme NexT works best with JavaScript enabled
Saltstack 部署安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 环境:关闭firewalld,iptables,selinux,设置dns或者hosts解析 python 版本: 2.7 <= python < 3 master和slave设置hosts解析: 192.168.1.117 saltstack-master 192.168.1.118 saltstack-slave ####安装saltstack 服务端安装: yum -y install epel-release yum -y install salt-master salt-minion 服务端配置修改: # vim /etc/salt/minion //在第16行添加,冒号后有一个空格 master: saltstack-master 客户端安装: yum -y install epel-release yum -y install salt-minion 客户端配置修改: # vim /etc/salt/minion //在第16行添加,冒号后有一个空格 master: saltstack-master 客户端和服务端启动服务: service salt-master start #只有服务端安装了该服务 service salt-minion start #服务端和客户端都安装此服务 配置认证: 服务端操作: salt-key -a saltstack-master salt-key -a saltstack-slave salt-key 说明:-a :accept ,-A:accept-all,-d:delete,-D:delete-all。可以使用 salt-key 命令查看到已经签名的客户端。此时我们在客户端的 /etc/salt/pki/minion 目录下面会多出一个minion_master.pub 文件 测试验证: 示例1: salt '*' test.ping //检测通讯是否正常,也可以指定其中一个 'saltstack-master' 示例2: salt '*' cmd.run 'df -h' //远程执行命令
Saltstack 错误总结 1 2 3 4 5 6 1、错误信息 Minion did not return. [Not connected] 删除客户端公钥:rm -rf /etc/salt/pki/minion/minion_master.pub service salt-minion restart #重启client服务 2、错误信息:Failed building wheel for uwsgi yum -y install python-devel(python2.7)
Pdsh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ##pdsh安装## yum -y install gcc gcc-c++ perl-devel readline-devel bzip2 #安装依赖 下载源码包:https://sourceforge.net/projects/pdsh/files/latest/download tar -xjvf pdsh-2.26.tar.bz2 cd pdsh-2.26 ./configure --prefix=/usr/local/globle/softs/tools/pdsh/2.26/ --with-timeout=60 --with-ssh --with-exec --with-nodeupdown --with-readline --with-machines=/etc/pdsh/machines --with-dshgroups make && make install 参数详解: 选项 解释 --prefix 指定安装目录 --with-timeout=60 指定pdsh默认执行超时时间 --with-ssh 编译ssh模块 --with-exec 编译exec模块 --with-nodeupdown 编译节点宕机功能 --with-readline 编译readline功能 --with-rcmd-rank-list 指定默认模式为ssh --with-machines 指定默认主机列表 --with-dshgroups 调用组-g选项(默认文件位置:/root/.dsh/group/userhosts or /etc/dsh/group/userhosts) 把pdsh安装机器公钥存放到个远端服务器/root/.ssh/authorized_keys ln -s /usr/local/pdsh/bin/pdsh /usr/sbin/pdsh #设置软连接
kubernetes 工作原理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1、Master节点包括API Server、Scheduler、Controller manager、etcd API Server是整个系统的对外接口,供客户端和其它组件调用,相当于“营业厅” Scheduler负责对集群内部的资源进行调度,相当于“调度室” Controller manager负责管理控制器,相当于“大总管 2、Node节点包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可选)、pod Pod是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。除了Pod之外,K8S还有一个Service的概念,一个Service可以看作一组提供相同服务的Pod的对外访问接口 Docker 创建容器的 Kubelet,主要负责监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等 Kube-proxy,主要负责为Pod对象提供代理 Fluentd,主要负责日志收集、存储与查询
kubernetes kubeadm 部署 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 [镜像地址](https://download.csdn.net/download/qq_33432713/10775173) :https://download.csdn.net/download/qq_33432713/10775173 系统环境:CentOS Linux release 7.3.1611 (Core) 1、关闭selinux,关闭firewalld,关闭swap systemctl stop firewalld `&&` systemctl disable firewalld swapoff -a 2、配置主机映射和修改主机名 hostnamectl set-hostname k8s-master 3、yum -y install docker `&&` systemctl start docker `&&` systemctl enable docker 4、 yum -y install kubectl kubelet kubernetes-cni kubeadm (这几个软件需要去google的yum源下载,建议下本地vpnFQ,把软件包下载下来) 5、systemctl start kubelet `&&` systemctl enable kubelet 6、master端导入需要镜像(详细见软件包) 7、kubeadm进行初始化: kubeadm init --kubernetes-version=v1.9.1 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=0.0.0.0 --apiserver-cert-extra-sans=10.2.0.35,127.0.0.1,k8s-master --apiserver-cert-extra-sans #该参数指定自己内网地址和映射 在执行过程中,要等几分钟,然后执行以下命令: 然后执行如下命令: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config 成功以后可以指定一下命令进行查看: kubectl get cs kubectl get nodes 8、注意: 记住该条命令:kubeadm join --token d506ef.63c05fa829529565 10.2.0.37:6443 --discovery-token-ca-cert-hash sha256:4cd1954bf2a1c0904f92328d33bc25471604abd918e019b3c1905289fb8130f2 #在node节点执行该条命令,--token是有有效期的,默认是24小时 9、部署 flannel mkdir -p ~/k8s/ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml kubectl apply -f kube-flannel.yml #执行会输出一下内容: 10、kubectl get pod -n kube-system #注意红框内出现Running状态然后在node节点 在node节点部署 1、同master节点前五步一样部署 2、导入镜像:其实我导入多了,只需要导入一下几个就可以了:gcr.io/google_containers/kube-apiserver-amd64、gcr.io/google_containers/etcd-amd64、quay.io/coreos/flannel、gcr.io/google_containers/etcd-amd64 3、执行master的第8步,就可以了,然后在master上执行:kubectl get nodes,看到如下图: 注意:要想在node节点执行该条命令,需要再node上执行以下命令: sudo cp /etc/kubernetes/admin.conf $HOME/ sudo chown $(id -u):$(id -g) $HOME/admin.conf export KUBECONFIG=$HOME/admin.conf 不然会出现以下错误:The connection to the server localhost:8080 was refused - did you specify the right host or port?(单独开终端也会出现) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 最后是版本对应: master: REPOSITORY TAG IMAGE ID CREATED SIZE gcr.io/google_containers/kube-apiserver-amd64 v1.9.1 e313a3e9d78d 7 days ago 210.4 MB gcr.io/google_containers/kube-scheduler-amd64 v1.9.1 677911f7ae8f 7 days ago 62.7 MB gcr.io/google_containers/kube-proxy-amd64 v1.9.1 e470f20528f9 7 days ago 109.1 MB gcr.io/google_containers/kube-controller-manager-amd64 v1.9.1 4978f9a64966 7 days ago 137.8 MB quay.io/coreos/flannel v0.9.1-amd64 2b736d06ca4c 8 weeks ago 51.31 MB gcr.io/google_containers/k8s-dns-sidecar-amd64 1.14.7 db76ee297b85 11 weeks ago 42.03 MB gcr.io/google_containers/k8s-dns-kube-dns-amd64 1.14.7 5d049a8c4eec 11 weeks ago 50.27 MB gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64 1.14.7 5feec37454f4 11 weeks ago 40.95 MB gcr.io/google_containers/etcd-amd64 3.1.10 1406502a6459 4 months ago 192.7 MB gcr.io/google_containers/pause-amd64 3.0 99e59f495ffa 20 months ago 746.9 kB node节点对应: REPOSITORY TAG IMAGE ID CREATED SIZE gcr.io/google_containers/kube-apiserver-amd64 v1.9.1 e313a3e9d78d 7 days ago 210.4 MB quay.io/coreos/flannel v0.9.1-amd64 2b736d06ca4c 8 weeks ago 51.31 MB gcr.io/google_containers/etcd-amd64 3.1.10 1406502a6459 4 months ago 192.7 MB gcr.io/google_containers/pause-amd64 3.0 99e59f495ffa 20 months ago 746.9 kB #以下是另一种网络版本对应: REPOSITORY TAG IMAGE ID CREATED SIZE quay.io/calico/node v2.6.2 6763a667e3ba 12 weeks ago 281.6 MB quay.io/calico/cni v1.11.0 c3482541970f 3 months ago 70.88 MB 错误信息总结: 1、错误:Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes") 解决方案:设置环境变量: sudo cp /etc/kubernetes/admin.conf $HOME/ sudo chown $(id -u):$(id -g) $HOME/admin.conf export $KUBECONFIG=$HOME/.kube/admin.conf 2、错误:[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1 解决方案:cat /etc/sysctl.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 3、获取登录token kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
docker docker常识积累 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 docker CE社区版官方免费支持(7个月) docker EE企业版官方免费支持(24个月) 国内支持仓库云服务商: 时速云镜像仓库、网易云镜像服务、DaoCloud 镜像市场、阿里云镜像 ###centos 安装docker-ce $ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine 安装依赖包: sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 添加yum源: sudo yum-config-manager \ --add-repo \ https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo 官网源: # $ sudo yum-config-manager \ # --add-repo \ # https://download.docker.com/linux/centos/docker-ce.repo 如果需要测试版本的 Docker CE 请使用以下命令: $ sudo yum-config-manager --enable docker-ce-test 如果需要每日构建版本的 Docker CE 请使用以下命令: $ sudo yum-config-manager --enable docker-ce-nightly 更新 yum 软件源缓存,并安装 docker-ce $ sudo yum makecache fast $ sudo yum install docker-ce 使用脚本自动安装 $ curl -fsSL get.docker.com -o get-docker.sh $ sudo sh get-docker.sh --mirror Aliyun 启动 Docker CE $ sudo systemctl enable docker $ sudo systemctl start docker 添加内核参数 如果在 CentOS 使用 Docker CE 看到下面的这些警告信息: WARNING: bridge-nf-call-iptables is disabled WARNING: bridge-nf-call-ip6tables is disabled 请添加内核配置参数以启用这些功能。 $ sudo tee -a /etc/sysctl.conf <<-EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF 然后重新加载 sysctl.conf 即可 $ sudo sysctl -p 查看镜像大小 docker system df #查看镜像、容器、数据卷所占用的空间 docker images 等于 docker image ls #查看镜像实际占用磁盘空间 docker image ls -f dangling=true #显示虚悬镜像(虚悬镜像:是指没有仓库名和标签的镜像) docker image prune #删除虚悬镜像 # docker image ls -f before=crond_new:1.0.1 #查看crond_new:1.0.1之前建立镜像 # docker image ls -f since=crond_dev:1.0.0 #查看crond_dev:1.0.0之后建立镜像 # docker image ls -q #只列出镜像ID # docker image ls --format "{{.ID}}: {{.Repository}}" #只列出镜像ID和仓库名 # docker image ls --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}" #指定间隔符号 # docker image ls --digests #获取精确镜像摘要 # docker rm node@sha256:b4f0e0bdeb578043c1ea6862f0d40cc4afe32a4a582f3be235a3b164422be228 #根据镜像摘要进行删除 # docker image rm $(docker image ls -q redis) #删除redis实列
docker volume 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 docker volume ls docker volume inspect my-vol docker run -d -P --name web --mount source=my-vol,target=/webapp training/webapp python app.py #挂载实列 docker inspect web #查看逻辑卷信息 docker volume rm my-vol #删除逻辑卷 docker volume prune #删除无主逻辑卷 docker run -itd --name test_local --restart=always --mount type=bind,source=/opt/app,target=/kuaibao/www alpine /bin/sh #挂载本地目录至容器中,和-v选项区别是:本地目录不存在时会报错,而-v则会自己创建 docker run -itd --name test --restart=always --mount source=my-vol,target=/kuaibao/www alpine /bin/sh #挂载本地创建的volume挂载至容器中 Docker 挂载主机目录的默认权限是 读写,用户也可以通过增加 readonly 指定为 只读。 docker run -itd --name test_read --restart=always --mount type=bind,source=/opt/app,target=/kuaibao/www,readonly alpine /bin/sh #只读模式,如下测试 [root@k8s-slave ~]# docker exec -it test_read touch /kuaibao/www/1.txt touch: /kuaibao/www/1.txt: Read-only file system docker run -itd --name test_file --restart=always --mount type=bind,source=$HOME/.bash_history,target=/root/.bash_history alpine /bin/sh #挂载文件至容器中
docker 选项 1 2 3 4 5 6 7 8 9 10 EXPOSE 记录服务可用端口,但是并不创建喝宿主机之间的映射 --export 运行时暴露端口,但是并不创建喝宿主机之间的映射 -p 创建端口映射规则,比如 -p ip:hostPort:containerPort| ip::containerPort | hostPort:containerPort | containerPort 必须指定containerPort,如果没有指定hostPort,Docker 会自动分配端口 -P 将Dockerfile里暴露的所有容器端口映射到动态分配的宿主机端口上 --link 在消费和服务容器之间创建链接,比如 --link name:alias 这会创建一系列环境变量,并在消费者容器的/etc/hosts文件里添加入口项 必须暴露或发布端口
docker log 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 docker logs [OPTIONS] CONTAINER Options: --details 显示更多的信息 -f, --follow 跟踪实时日志 --since string 显示自某个timestamp之后的日志,或相对时间,如42m(即42分钟) --tail string 从日志末尾显示多少行日志, 默认是all -t, --timestamps 显示时间戳 --until string 显示自某个timestamp之前的日志,或相对时间,如42m(即42分钟) 案列: #查看指定时间后的日志,只显示最后100行: docker logs -f -t --since="2018-02-08" --tail=100 CONTAINER_ID #查看最近30分钟的日志 docker logs --since 30m CONTAINER_ID #查看某时间之后的日志: docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID #查看某时间段日志 docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID
docker-compose