文章目录
Kuberbetes – k8s 集群搭建辅助项目
- 一键搭建集群(开发人员使用)
- 一步一步搭建(专业运维人员使用)
搭建集群
因为电脑内存小就搭建两台
搭建K1
环境部署
给文件添加执行权限
chmod +x ./ezdown
执行kubeasz 项目提供的脚本文件,下载离线文件,并安装docker
./ezdown -D
导入镜像(用于测试K8S)
docker load -i images.gz
启动工作节点
克隆K2
主服务器上执行
启动临时容器
./ezdown -S
修改配置文件,安装方式改为离线安装
sed -i 's/^INSTALL_SOURCE.*$/INSTALL_SOURCE: "offline"/g' /etc/kubeasz/example/config.yml
设置192工作节点免密登录
ssh-keygen -t rsa -b 2048 -N '' -f ~/.ssh/id_rsa
ssh-copy-id 192.168.64.191
ssh-copy-id 192.168.64.192
创建集群配置方案
cd /etc/kubeasz
chmod +x ezctl
# 新建方案
./ezctl new cs1
修改文件新建的host文件
执行一键安装脚本
cd /etc/kubeasz
./ezctl setup cs1 all
K8s配置
Pod
是K8S的容器,是对docker容器的封装对象,通过Pod对底层容器化 技术进行解耦
控制器
自动部署容器的工具
ReplicationController
RC可以自动化维护多个pod,只需指定pod副本的数量,就可以轻松实现自动扩容缩容
当一个pod宕机,RC可以自动关闭pod,并启动一个新的pod替代它
cat <<EOF > kubia-rc.yml
apiVersion: v1
kind: ReplicationController # 资源类型
metadata:
name: kubia # 为RC命名
spec:
replicas: 3 # pod副本的数量
selector: # 选择器,用来选择RC管理的pod
app: kubia # 选择标签'app=kubia'的pod,由当前RC进行管理
template: # pod模板,用来创建新的pod
metadata:
labels:
app: kubia # 指定pod的标签
spec:
containers: # 容器配置
- name: kubia # 容器名
image: luksa/kubia # 镜像
imagePullPolicy: Never
ports:
- containerPort: 8080 # 容器暴露的端口
EOF
创建RC控制器
k create -f kubia-rc.yml
ReplicaSet
提供了丰富的pod 选择器,一后使用RS老项目使用RC
在控制台使用时需要将cat命令去掉
cat <<EOF > kubia-replicaset.yml
apiVersion: apps/v1 # RS 是 apps/v1中提供的资源类型
kind: ReplicaSet # 资源类型
metadata:
name: kubia # RS 命名为 kubia
spec:
replicas: 3 # pod 副本数量
selector:
matchLabels: # 使用 label 选择器
app: kubia # 选取标签是 "app=kubia" 的pod
template:
metadata:
labels:
app: kubia # 为创建的pod添加标签 "app=kubia"
spec:
containers:
- name: kubia # 容器名
image: luksa/kubia # 镜像
imagePullPolicy: Never
EOF
创建RS
k create -f kubia-replicaset.yml
DaemonSet
在每个服务器上部署一个例如监控
cat <<EOF > ssd-monitor-daemonset.yml
apiVersion: apps/v1
kind: DaemonSet # 资源类型
metadata:
name: ssd-monitor # DS资源命名
spec:
selector:
matchLabels: # 标签匹配器
app: ssd-monitor # 匹配的标签
template:
metadata:
labels:
app: ssd-monitor # 创建pod时,添加标签
spec:
containers: # 容器配置
- name: main # 容器命名
image: luksa/ssd-monitor # 镜像
imagePullPolicy: Never
EOF
创建
k create -f ssd-monitor-daemonset.yml
job
控制单次运行的应用
Cronjob
定时和重复执行的任务
cron时间表格式:
“分钟 小时 每月的第几天 月 星期几”
cat <<EOF > cronjob.yml
apiVersion: batch/v1beta1 # api版本
kind: CronJob # 资源类型
metadata:
name: batch-job-every-fifteen-minutes
spec:
# 0,15,30,45 - 分钟
# 第一个* - 每个小时
# 第二个* - 每月的每一天
# 第三个* - 每月
# 第四个* - 每一周中的每一天
schedule: "0,15,30,45 * * * *"
jobTemplate:
spec:
template:
metadata:
labels:
app: periodic-batch-job
spec:
restartPolicy: OnFailure
containers:
- name: main
image: luksa/batch-job
imagePullPolicy: Never
EOF
标签选择器
标签样式 k1=v1
通过标签指定控制器和容器的关联
Service
用来访问容器的入口
回话亲和性
来自同一个客户端的请求,总是发给同一个pod
cat <<EOF > kubia-svc-clientip.yml
apiVersion: v1
kind: Service
metadata:
name: kubia-clientip
spec:
sessionAffinity: ClientIP # 回话亲和性使用ClientIP
ports:
- port: 80
targetPort: 8080
selector:
app: kubia
EOF
endpoint
endpoint是在Service和pod之间的一种资源
不含pod选择器的服务,不会创建 endpoint
创建endpoint关联到Service,它的名字必须与Service同名
通过外部系统域名来访问
cat <<EOF > external-service-externalname.yml
apiVersion: v1
kind: Service
metadata:
name: external-service-externalname
spec:
type: ExternalName
externalName: www.chinaunicom.com.cn # 域名
ports:
- port: 80
EOF
标签选择器
通过标签指定Service和容器的关联,转发调用时在选中的容器间调用