redis

敞开防火墙

# 敞开防火墙systemctl stop firewalld.service# 禁止防火墙开机启动systemctl disable firewalld.service

启动或重启docker

# 启动dockersystemctl start docker# 重启dockersystemctl restart docker

redis

# 启动三个Redis容器docker run -d --name redis7000 -p 7000:6379 redisdocker run -d --name redis7001 -p 7001:6379 redisdocker run -d --name redis7002 -p 7002:6379 redis# 查看容器docker ps# 拜访Redis服务docker exec -it redis7000 redis-clidocker exec -it redis7001 redis-clidocker exec -it redis7002 redis-cli

实现代码

package test;import redis.clients.jedis.JedisPoolConfig;import redis.clients.jedis.JedisShardInfo;import redis.clients.jedis.ShardedJedis;import redis.clients.jedis.ShardedJedisPool;import java.util.ArrayList;public class Test {    public static void main(String[] args) {        // 配置对象 JedisPoolConfig conf = new JedisPoolConfig();        // 服务器列表 ArrayList<JedisShardInfo> list = new ArrayList<JedisShardInfo>();        list.add(new JedisShardInfo("192.168.64.150",7000));        list.add(new JedisShardInfo("192.168.64.150",7001));        list.add(new JedisShardInfo("192.168.64.150",7002));        // 创立分片客户端 ShardedJedisPool pool = new ShardedJedisPool(conf, list);        ShardedJedis j = pool.getResource();        // 存储数据 0 - 99 键值对 for (int i=0;i<100;i++){            j.set("k"+i,"v"+i);        }    }}

web+mysql

网络

# 删除 my-net 网络docker network rm my-net# 创立 dockernet网络docker network create dockernet --subnet=172.18.0.0/24# 查看网络docker network lsdocker inspect dockernet# 查看宿主机上创立的虚构网络ifconfig

启动mysql容器

# 创立数据卷 mysql-datadocker volume create mysql-data# 查看数据卷详情docker inspect mysql-data# 删除容器docker rm -f mysql# 启动mysqldocker run \-d --name mysql \-p 3306:3306 \-v mysql-data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=root \--restart=always \--net dockernet \--ip 172.18.0.11 \mariadb# 导入数据 课前材料\亿发课前材料-2003\DevOps课前材料\docker\docker课前材料\EasyMall\easymall.sql

web利用

# 筹备宿主机的文件夹和文件mkdir /opt/webapps# 上传 课前材料\亿发课前材料-2003\DevOps课前材料\docker\docker课前材料\EasyMall\ROOT.war 到 /opt/webapps/# 启动 tomcat 容器docker run -d --name web \-p 80:8080 \-v /opt/webapps:/usr/tomcat/webapps \--net dockernet \--ip 172.18.0.12 \tomcat:7http://192.168.64.150

Kubernetes

简称K8s
全自动容器部署工具 - 继续部署

谷歌的开源工具,在谷歌外部曾经运行几年,治理上千万容器
毛病:过于简单

集群搭建的简化我的项目:

  • https://github.com/opsnull/fo...

手把手部署kubernetes

  • https://github.com/easzlab/ku...

一键装置脚本

K8s集群计划
1、单机 - 16G以上
一个主控,两个工作节点
2、单机 - 8G以上
一个主控+工作基点,一个工作节点
3、多台主机 - 4G
一台主机启动一个虚拟机,用桥接网络

配置集群环境

1、克隆centos-7-1908:k1
2、设置cpu和内存
cpu - 2
内存 - 2G
第三个计划,把网络设置成桥接网络
3、设置ip

./ip-staticip:192.168.64.191第三个计划,用主动获取ip./ip-dhcp

4、上传文件

  • easzup、images.gz两个文件上传到
  • easzup上传到/root目录下
  • ansible目录上传到/etc/目录下
# 对easzup文件设置执行权限chmod +x ./easzup# 下载离线安装文件,并装置配置docker,# 如果离线文件曾经存在则不会反复下载,# 离线安装文件寄存门路: /etc/ansible./easzup -D# 启动kubeasz工具应用的长期容器./easzup -S# 进入该容器docker exec -it kubeasz sh# 上面命令在容器内执行# 配置离线装置cd /etc/ansiblesed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE: "offline"/g' roles/chrony/defaults/main.ymlsed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE: "offline"/g' roles/ex-lb/defaults/main.ymlsed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE: "offline"/g' roles/kube-node/defaults/main.ymlsed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE: "offline"/g' roles/prepare/defaults/main.ymlexit# 装置 python,已装置则疏忽这一步yum install python -y

为了节省时间,前面课程中应用的docker镜像不必再花工夫从网络下载
将课前材料中 images.gz 中的镜像导入 docker

docker load -i images.gz

第三计划,下面6步在每台电脑都要做

7、以后服务器拍摄快照
8、克隆k1,克隆两个服务器:k2、k3
9、k2和k3设置ip

  • 192.168.64.192
  • 192.168.64.193

./ip-static
192.168.64.193

在master上持续配置装置环境

# 装置pip,已装置则疏忽这一步wget -O /etc/yum.repos.d/epel-7.repo https://mirrors.aliyun.com/repo/epel-7.repoyum install git python-pip -y# pip装置ansible(国内如果装置太慢能够间接用pip阿里云减速),已装置则疏忽这一步pip install pip --upgrade -i https://mirrors.aliyun.com/pypi/simple/pip install ansible==2.6.12 netaddr==0.7.19 -i https://mirrors.aliyun.com/pypi/simple/# 在ansible管制端配置免明码登陆其余节点服务器ssh-keygen -t ed25519 -N '' -f ~/.ssh/id_ed25519# 公钥复制到所有节点,包含master本人# 按提醒输出yes和root管理员的明码ssh-copy-id 192.168.64.191ssh-copy-id 192.168.64.192ssh-copy-id 192.168.64.193

配置集群服务器的ip

cd /etc/ansible && cp example/hosts.multi-node hosts && vim hosts

# 查看集群主机状态ansible all -m ping

一键装置k8s集群

装置步骤十分多,工夫较长,急躁期待装置实现

cd /etc/ansibleansible-playbook 90.setup.yml

设置kubectl命令别名

# 设置 kubectl 命令别名 kecho "alias k='kubectl'" >> ~/.bashrc# 使设置失效source ~/.bashrc

配置主动补全

yum install -y bash-completionsource <(kubectl completion bash)echo "source <(kubectl completion bash)" >> ~/.bashrcsource ~/.bashrc

验证装置

k get cs---------------------------------------------------------NAME                 STATUS    MESSAGE             ERRORetcd-1               Healthy   {"health":"true"}   scheduler            Healthy   ok                  controller-manager   Healthy   ok                  etcd-2               Healthy   {"health":"true"}   etcd-0               Healthy   {"health":"true"}   k get node---------------------------------------------------------------------NAME             STATUS                     ROLES    AGE     VERSION192.168.64.191   Ready,SchedulingDisabled   master   5d23h   v1.15.2192.168.64.192   Ready                      node     5d23h   v1.15.2192.168.64.193   Ready                      node     5d23h   v1.15.2

K8s基本概念

pod容器

docker容器的封装对象,一个pod能够封装多个docker容器
K8s以pod为单位来部署容器

rc控制器

能够自动控制容器的部署和销毁

cd ~/k run \    --image=luksa/kubia \    --port=8080 \    --generator=run/v1 kubiak get rc---------------------------------------NAME    DESIRED   CURRENT   READY   AGEkubia   1         1         1       24sk get pods----------------------------------------------NAME          READY   STATUS    RESTARTS   AGEkubia-9z6kt   1/1     Running   0          28s

service

提供一个不变的拜访地址,能够向所有容器转发调用

k expose \    rc kubia \    --type=NodePort \    --name kubia-httpk get svc------------------------------------------------------------------------------NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGEkubia-http   NodePort    10.68.194.195   <none>        8080:20916/TCP   4s

pod主动伸缩

k8s对利用部署节点的主动伸缩能力十分强,只须要指定须要运行多少个pod,k8s就能够实现pod的主动伸缩

# 将pod数量减少到3个k scale rc kubia --replicas=3k get po -o wide----------------------------------------------------------------------------------------------------------------NAME          READY   STATUS    RESTARTS   AGE   IP            NODE             NOMINATED NODE   READINESS GATESkubia-q7bg5   1/1     Running   0          10s   172.20.3.29   192.168.64.193   <none>           <none>kubia-qkcqh   1/1     Running   0          10s   172.20.2.30   192.168.64.192   <none>           <none>kubia-zlmsn   1/1     Running   0          16m   172.20.3.28   192.168.64.193   <none>           <none># 将pod数量缩小到1个k scale rc kubia --replicas=1# k8s会主动进行两个pod,最终pod列表中会只有一个podk get po -o wide---------------------------------------------------------------------------------------------------------------------NAME          READY   STATUS        RESTARTS   AGE    IP            NODE             NOMINATED NODE   READINESS GATESkubia-q7bg5   1/1     Terminating   0          6m1s   172.20.3.29   192.168.64.193   <none>           <none>kubia-qkcqh   1/1     Terminating   0          6m1s   172.20.2.30   192.168.64.192   <none>           <none>kubia-zlmsn   1/1     Running       0          22m    172.20.3.28   192.168.64.193   <none>           <none>

应用部署文件手动部署pod

创立kubia-manual.yml部署文件

cat <<EOF > kubia-manual.yml apiVersion: v1               # k8s api版本kind: Pod                    # 该部署文件用来创立pod资源metadata:                  name: kubia-manual         # pod名称前缀,前面会追加随机字符串spec:  containers:                # 对pod中容器的配置  - image: luksa/kubia       # 镜像名    imagePullPolicy: Never    name: kubia              # 容器名    ports:    - containerPort: 8080    # 容器裸露的端口      protocol: TCPEOF

应用部署文件创建pod

k create -f kubia-manual.ymlk get po-----------------------------------------------NAME           READY   STATUS    RESTARTS   AGEkubia-manual   1/1     Running   0          19s

查看pod的部署文件

# 查看pod的部署文件k get po kubia-manual -o yaml

查看pod日志

k logs kubia-manual