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
发表回复