虚拟机,容器和 K8S
虚拟机
像是租一间空房,租完以后还要自行布置家具。
容器
像是领包入住,租的房子已经有了家具,不需要自己布置了。想要厨房就租有厨房的,不想要也可以找没有厨房的。
K8S
像是酒店式公寓,经由前台的服务,可以方便快速的租房退房换房等。
Cluster、Node、Pod
Cluster
Kubernetes 把多个资源关联起来运行应用,这一堆资源合起来就叫做 Cluster,集群。
Node
提供资源的服务器或是虚拟机,即为 Node,节点。
Pod
存放容器的单位,类似于豆荚(Pod)和豆子(容器)的关系。
Minikube
Windows 安装 Docker Desktop 搭建 K8S 学习环境
下载安装 Docker Desktop
安装后打开闪退报错 Unexpected WSL error
尝试以管理员身份运行 cmd:
bash
wsl --update
netsh winsock reset
wsl --shutdown
开启 K8S
随后 cmd 中输入kubectl
:
安装成功!
kubectl
常用命令
-
create 创建资源
-
expose 将资源暴露为新的 Kubernetes Service
-
run 运行镜像
-
set 直接动态调整属性
-
explain 描述各种资源的字段和结构
-
get 获取资源
-
edit 直接在现有的资源对象基础上,修改 xx 属性
-
delete 删除资源
-
rollout 部署和回滚
-
scale 扩缩容,直接动态调整数量
-
describe 限定特定资源的详细信息
-
logs 打印 pod 中容器的日志
-
exec 在某个容器中执行一个命令
-
apply 基于资源清单文件,把资源创建出来
bash
kubectl get xxx
kubectl delete xxx xxxname
kubectl create -f xxxpath
kubectl replace -f xxxpath
kubectl apply -f xxxpath
例如
bash
# 查看pods
kubectl get pods
# 删除pod
kubectl delete pod podName
# 通过配置文件创建(可以是pod、ReplicaSet、deployment、service等)
kubectl create -f config.yml
Pod
Pod 是 Kubernets 可以调度的最小对象
命令创建:
bash
kubectl run my-nginx --image=k8s-register.com/wsvaio/nginx:1.25.4
# 查看预期状态 转为资源文件
kubectl run my-nginx --image=k8s-register.com/wsvaio/nginx:1.25.4 --dry-run=client -o yaml
# 查看实际状态 转为资源文件
kubectl get my-nginx -o yaml
配置文件:
yml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx
随后可以使用 kubectl 命令创建 pod:
bash
# 创建
kubectl create -f pod.yml
# 查看pods
kubectl get pods
ReplicaSet
译为副本集,主要用于维持一定数量的 pod 可以运行
配置文件:
yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-replicaset
labels:
name: nginx-replica
spec:
replicas: 8
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx
随后可以使用 kubectl 命令创建 ReplicaSet:
bash
# 创建
kubectl create -f ReplicaSet.yml
# 查看ReplicaSets,rs即为ReplicaSet
kubectl get rs
deployment
Deployment 就是更高级的 ReplicaSet,创建 Deployment 的时候会创建 ReplicaSet
配置文件:
yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
name: nginx-deploy
spec:
replicas: 4
selector:
matchLabels:
app: nginx
template:
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx:1.25.3
随后可以使用 kubectl 命令创建 Deployment:
bash
# 创建
kubectl create -f deployment.yml
# 查看deployments
kubectl get deployments
# 更新deployments
kubectl apply -f deployment.yml
service
应用间的交互或对外暴露服务需要用到 service
- ClusterIP 在集群内分配 IP 地址,这个 IP 只能在集群内部使用
- NodePort 让节点暴露端口,使得外部可以访问内部的应用
- LoadBalancer
- ExternalName
命令创建:
bash
kubectl expose deployment my-tomcat --port=8080
配置文件(NodePort 暴露一个端口给外部访问):
yml
apiVersion: v1
kind: Service
metadata:
name: external-service
spec:
type: NodePort
selector:
app: nginx
ports:
- port: 80 # service 端口号
targetPort: 80 # pod中应用的端口号
nodePort: 30008 # 节点暴露的端口号(30000-32767)
随后可以使用 kubectl 命令创建 service:
bash
# 创建
kubectl create -f service.yml
# 查看services,默认有一个kubernetes的service
kubectl get services
volume
- emptyDir
yaml
volumes:
- name: volume_name
emptyDir: {}
- hostPath
yaml
volumes:
- name: volume_name
hostPath:
path: /path/to/host
- NFS
yaml
volumes:
- name: redis-backup
nfs:
server: NFS_SERVER
path: /path/to/nfs-dir
- PV
yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: superopsmsb-pv
spec:
capacity:
storage: 3Gi
accessModes:
- ReadWriteOnce
nfs:
path: /superopsmsb/nfs-data
server: 10.0.0.18
- PVC
yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: superopsmsb-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
- SC
yaml
storageClassName: storageclass
yaml
apiVersion: apps/v1
kind: StatefulSet
spec:
volumeClaimTemplates:
- metadata:
spec:
storageClassName: storageclass
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
ConfigMap
bash
# 创建cm资源对象
kubectl create configmap nginx-ssl-conf --from-file=nginx-conf-tls/
yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: my-nginx-index
data:
index.html: "Hello Nginx, I'am just fool for you !"
Secret
bash
kubectl create secret tls nginx-ssl-secret --cert=tls.crt --key=tls.key
yaml
apiVersion: v1
kind: Secret
type: kubernetes.io/tls
metadata:
name: nginx-ssl-secret
data:
tls.crt: xxx
tls.key: xxx
感谢
【入门篇】Kubernetes 的核心概念以及在本地部署多种资源
马士兵全套Kubernetes(K8S)入门+项目实战,一个视频带你彻底掌握K8S核心能力!
Comments | 0条评论