共计 6369 个字符,预计需要花费 16 分钟才能阅读完成。
redis
敞开防火墙
# 敞开防火墙
systemctl stop firewalld.service
# 禁止防火墙开机启动
systemctl disable firewalld.service
启动或重启 docker
# 启动 docker
systemctl start docker
# 重启 docker
systemctl restart docker
redis
# 启动三个 Redis 容器
docker run -d --name redis7000 -p 7000:6379 redis
docker run -d --name redis7001 -p 7001:6379 redis
docker run -d --name redis7002 -p 7002:6379 redis
# 查看容器
docker ps
# 拜访 Redis 服务
docker exec -it redis7000 redis-cli
docker exec -it redis7001 redis-cli
docker 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 ls
docker inspect dockernet
# 查看宿主机上创立的虚构网络
ifconfig
启动 mysql 容器
# 创立数据卷 mysql-data
docker volume create mysql-data
# 查看数据卷详情
docker inspect mysql-data
# 删除容器
docker rm -f mysql
# 启动 mysql
docker 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:7
http://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-static
ip: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/ansible
sed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE:"offline"/g' roles/chrony/defaults/main.yml
sed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE:"offline"/g' roles/ex-lb/defaults/main.yml
sed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE:"offline"/g' roles/kube-node/defaults/main.yml
sed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE:"offline"/g' roles/prepare/defaults/main.yml
exit
# 装置 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.repo
yum 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.191
ssh-copy-id 192.168.64.192
ssh-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/ansible
ansible-playbook 90.setup.yml
设置 kubectl 命令别名
# 设置 kubectl 命令别名 k
echo "alias k='kubectl'" >> ~/.bashrc
# 使设置失效
source ~/.bashrc
配置主动补全
yum install -y bash-completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc
验证装置
k get cs
---------------------------------------------------------
NAME STATUS MESSAGE ERROR
etcd-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 VERSION
192.168.64.191 Ready,SchedulingDisabled master 5d23h v1.15.2
192.168.64.192 Ready node 5d23h v1.15.2
192.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 kubia
k get rc
---------------------------------------
NAME DESIRED CURRENT READY AGE
kubia 1 1 1 24s
k get pods
----------------------------------------------
NAME READY STATUS RESTARTS AGE
kubia-9z6kt 1/1 Running 0 28s
service
提供一个不变的拜访地址,能够向所有容器转发调用
k expose \
rc kubia \
--type=NodePort \
--name kubia-http
k get svc
------------------------------------------------------------------------------
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubia-http NodePort 10.68.194.195 <none> 8080:20916/TCP 4s
pod 主动伸缩
k8s 对利用部署节点的主动伸缩能力十分强, 只须要指定须要运行多少个 pod,k8s 就能够实现 pod 的主动伸缩
# 将 pod 数量减少到 3 个
k scale rc kubia --replicas=3
k get po -o wide
----------------------------------------------------------------------------------------------------------------
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kubia-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 列表中会只有一个 pod
k get po -o wide
---------------------------------------------------------------------------------------------------------------------
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kubia-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: TCP
EOF
应用部署文件创建 pod
k create -f kubia-manual.yml
k get po
-----------------------------------------------
NAME READY STATUS RESTARTS AGE
kubia-manual 1/1 Running 0 19s
查看 pod 的部署文件
# 查看 pod 的部署文件
k get po kubia-manual -o yaml
查看 pod 日志
k logs kubia-manual
正文完