# kubernetes
# 介绍
Kubernetes(通常简称为K8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。
# namespace
命名空间
# 作用:
- 资源隔离:不同的团队或项目可能需要不同的资源配额或安全策略。通过将资源分配到不同的命名空间,可以确保这些资源在逻辑上是隔离的。
- 权限控制:Kubernetes使用基于角色的访问控制(RBAC)来管理权限。命名空间是RBAC策略的一个关键组成部分,允许你定义哪些用户可以访问或修改哪些命名空间中的资源。
- 资源配额:你可以为命名空间设置资源配额,以限制其中所有Pod可以使用的CPU、内存等资源量。
# pod
pod是k8s中最小单元,可以运行一组一个或多个容器
#部署
kubectl run mynginx --image=nginx:1.14.2
#查看ip
kubectl get pod -owide
# deployment
负责创建和更新应用程序的实例,使Pod拥有多副本,自愈,扩缩容能力。
# 自愈能力
kubectl create deployment my-tomcat--image=tomcat:9.0.55
# 多副本
# 参数:--replicas
#命令行方式
kubectl create deployment my-tomcat--image=tomcat:9.0.55 --replicas=3
#脚本方式
vim my-tomcat.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: my-tomcat
name: my-tomcat
spec:
replicas: 3
selector:
matchLabels:
app: my-tomcat
template:
metadata:
labels:
app: my-tomcat
spec:
containers:
- image: tomcat:9.0.55
name: tomcat
#运行
kubectl apply -f my-tomcat.yaml
#查看
kubectl get pod
#删除
kubectl delete deployment my-tomcat
# 扩缩容
# 参数:scale
#扩容到5个pod
kubectl scale --replicas=5 deployment my-tomcat
#扩容到3个pod
kubectl scale --replicas=3 deployment my-tomcat
# 升级回滚
# 升级
#升级到10.1.11版本
kubectl set image deployment my-tomcat tomcat=tomcat:10.1.11 --record
#查看pod升级详情
kubectl describe pod my-tomcat-75794467bc-9frnk

#查看历史版本
kubectl rollout history deploy my-tomcat

# 回滚
#回滚到上一个版本
kubectl rollout undo deployment my-tomcat
#回滚到指定版本
kubectl rollout undo deployment my-tomcat --to-revision=1
#查看pod回滚详情
kubectl describe pod my-tomcat-7f776c8676-4ftkj
# service
Service 是一个微服务应用或者一组Pod的访问策略,提供服务发现和负载均衡
type类型:
ClusterIP(默认):只能在集群内访问
NodePort:公网访问
LoadBalancer:负载均衡
ExtemalName:带名称的,公开service
#命令行方式
kubectl expose deployment my-tomcat --name=tomcat --port=8080 --type=NodePort
#脚本方式
vim mytomcat-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: my-tomcat
name: my-tomcat
spec:
ports:
- port: 8080
nodePort: 30001
protocol: TCP
targetPort: 8080
type: NodePort
selector:
# 标签选择器由 name 修改为 app
app: my-tomcat
#运行
kubectl apply -f mytomcat-service.yaml
#查看
kubectl get service
#删除
kubectl delete service my-tomcat
port:服务在集群内部暴露的端口,在集群内通过虚拟ip加该端口访问服务。 targetPort:Pod暴漏的端口,与Pod内部暴漏的端口一致 nodePort:是集群外部访问服务的一种方式,通过在所有节点上开放一个端口来实现。
#服务内访问通过内网ip
curl 10.102.235.142:8080

#外网访问
http://172.17.110.249:30001

# volume(数据卷)
基于nfs分布式文件系统实现,参考(nfs分布式文件系统)
# ConfigMap
配置中心
将公共的配置存到etcd中,敏感信息用secret存储
存储方式4种:
# --from-literal 字面值方式
kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2
# --from-file 文件方式
kubectl create configmap my-config-2 --from-file=/etc/resolv.conf
#3 目录方式
mkdir test
cp /etc/passwd test/
cp /etc/fstab test/
kubectl create configmap my-config-3 --from-file=test
#4 YAML文件
vim cm1.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: cm1-config
data:
db_host: "172.25.0.250"
db_port: "3306"
kubectl apply -f cm1.yaml
#设置 redis.conf
vim redis.conf
maxmemory-policy allkeys-lru
requirepass root
#创建 configmap
kubectl create cm redis-config --from-file=redis.conf
#查看
kubectl get cm
#删除
kubectl delete cm redis-config
#脚本方式
vim redis-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis
command:
- redis-server
- "/redis-master/redis.conf" # redis容器内部位置
env:
- name: MASTER
value: "true"
ports:
- containerPort: 6379
volumeMounts:
- mountPath: /data
name: data
- mountPath: /redis-master
name: config
volumes:
- name: data
emptyDir: {}
- name: config
configMap:
name: redis-config
items:
- key: redis.conf
path: redis.conf
#运行
kubectl apply -f redis-pod.yaml
#查看
kubectl get pod
kubectl describe pod redis
#删除
kubectl delete pod redis
#验证是否生效
kubectl exec -it redis -- redis-cli
#授权
auth root
#查看redis.conf配置的key
config get requirepass

# secret
敏感信息存储,如token,密码等
#查看secret
kubectl get secret
kubectl delete secret alikey
#创建secret(alikey)
kubectl create secret docker-registry alikey --docker-server=[镜像仓库服务器] --docker-username=[用户名] --docker-password=[密码] --docker-email=[邮箱地址]
--镜像仓库服务器 registry.cn-beijing.aliyuncs.com
#记得先设置阿里上docker的密码,否则会导致无法登录
kubectl create secret docker-registry alikey \
--docker-server=registry.cn-beijing.aliyuncs.com \
--docker-username=[用户名] \
--docker-password=[密码] \
--docker-email=573122954@qq.com
#脚本方式
vim secret-dream.yaml
apiVersion: v1
kind: Pod
metadata:
name: dream
spec:
containers:
- name: dream
image: registry.cn-beijing.aliyuncs.com/meteorplan/dream:2.0
imagePullSecrets:
- name: alikey
#运行
kubectl apply -f secret-dream.yaml
#查看
kubectl get pod
kubectl describe pod dream
kubectl delete pod dream
# Ingress
k8s对外的入口,可以配置路由规则,通过Ingress转发到service
参考(ubuntu文档的-ingress)
# Spring Cloud Kubernetes(待补充)
实现微服务的服务发现与注册,配置管理,弹性伸缩与负载均衡,监控与日志,安全性与隔离性
功能与k8s功能一样,社区不完善