kubernetes-3-安装与使用
k8s是未来,理解了基础架构和概念后,从实践入手
一、基本应用
仅使用容器能力
// 类似docker启动服务
kubectl run redis –image=redis
// 查看pod
kubectl get pods
// 进入容器可直连
kubectl exec -it redis – bash
以上应用类似可以指定为k8s独有的Deployment(无状态应用,支持扩容缩容/滚动升级,自动重启等),如:
kubectl create deployment redis-deployment –image=redis
具体应用往往不是简单的镜像复制,而包含了很多参数。kubectl支持通过yml配置文件来创建服务
1
2
3
4
5
6
7
8
9# pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis
指定配置文件启动: kubectl create -f pod.yaml
Pod不具有自愈能力,一般是通过Controller来控制。比如自定义一个nginx:
1 | apiVersion: extensions/v1beta1 |
二 、kubectl命令汇总
获取节点和服务版本信息
kubectl get nodes获取pod的信息,以JSON格式展示
kubectl get pod -o json
查看所有deployments信息
kubectl get deploy -A
查看所有replicasets信息
kubectl get rs -A
查看所有statefulsets信息
kubectl get sts -A
查看所有jobs信息
kubectl get jobs -A
查看所有ingresses信息
kubectl get ing -A
查看有哪些名称空间
kubectl get ns
常用命令归类:
kubectl get – 输出一个/多个资源
kubectl create – 通过文件名或控制台输入,创建资源
kubectl delete – 通过文件名、控制台输入、资源名或者label selector删除资源
kubectl describe – 输出指定的一个/多个资源的详细信息
kubectl edit – 编辑服务端的资源
kubectl apply – 通过文件名或控制台输入,对资源进行配置
kubectl exec – 在容器内部执行命令
kubectl expose – 输入replication controller,service或者pod,并将其暴露为新的kubernetes service
kubectl logs – 输出pod中一个容器的日志
kuberctl命令行众多,不必死记硬背,在需要的时候查一查kuberctl命令行概览就知道了。
另外,开始不熟练可以通过dashboard访问。
1 | # 运行dashboard |
三、创建无状态服务
一个 Deployment 为 Pod 和 ReplicaSet (副本控制器)提供声明式的更新能力
3.1 平滑升级
创建有两个备份的nginx,版本号14:
1 | kubectl apply -f https://k8s.io/examples/application/deployment.yaml |
现在用一个新版本号的yml文件来, 升级nginx版本:
1 | kubectl apply -f https://k8s.io/examples/application/deployment-update.yaml |
观察输出的Events信息,会先启动新的服务,然后停掉旧的;这个升级过程是平滑的
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 1 max unavailable, 1 max surge
3.2 动态扩容缩容
扩容
1
2
3
4kubectl apply -f https://k8s.io/examples/application/deployment-scale.yaml
# 也可以使用scale缩放
kubectl scale deployment/nginx-deployment --replicas=4缩容
1
2
3
4# 指定备份数
kubectl scale deployment/nginx-deployment --replicas=2
# 按比例缩放
kubectl autoscale deployment/nginx-deployment --min=2 --max=10 --cpu-percent=80
3.3 回滚
1 | # 直接回滚 |
四、创建有状态服务集群
StatefulSet 是用来管理有状态应用的工作负载 API 对象。
参考: https://juejin.cn/post/7033600843131666469
创建一个主从结构的Redis集群:
1 | # server.yaml |
执行kubectl apply -f server.yaml
, 这里会创建redis-sfs-0 和 redis-sfs-1 两个 pod,他们正式按照 name-index 的规则来编号的。
上面的两个节点创建了,但是却是分开的两个主节点,而不是一主一从。需要建立Service,将它们放到一组:
1 | # service.yaml |
执行kubectl apply -f service.yaml
,再查看日志 kubectl logs -f redis-sfs-1
, 会获取主从连接信息。