1.k8s的组件的基本功能
2.k8s中常用的指令
查看集群的所有节点
kubectl get nodes
根据配置文件给集群创建资源
kubectl apply -f xxxx.yaml
查看集群部署了哪些应用
docker ps === kubectl get pods -A
运行的应用叫容器,在k8s中叫pods
3.k8s的核心概念
1.NameSpace
NameSpace:名称空间,用来对集群资源进行隔离划分。默认只隔离资源,不隔离网络
kubectl get ns //获取命名空间
kubectl get pod -n namespace //查看某个命名空间下的pod
kubectl create ns hello //创建命名空间
kubectl delete ns hello //删除命名空间
使用yaml文件创建也可以:比如 hello.yaml
apiVersion: v1
kind: Namespace
metadata:
name: hello
通过yaml创建使用指令:
kubectl apply -f hello.yaml//可以创建hello的ns
删除:kubectl delete -f hello.yaml 也可以
2.Pod
运行中的一组容器,pod是k8s中应用的最小单位
一个pod里面可以运行多个容器
1.命令管理pod
pod类似于一个员工宿舍,每个容器类似一个床位
kubectl run mynginx --image=nginx//创建一个名为mynginx的pod
kubectl describe pod myginx //查看mynginx的信息
kubectl get pod //查看default命名空间的pod
kubectl delete pod pod名字//删除pod
kubectl logs -f mynginx //查看pod运行的日志
#每个pod k8s都会分配一个ip地址
kubectl get pod -owide
#进入容器的控制台中
kubectl exec -it mynginx -- /bin/bash
#集群中的任意一个机器以及都可以通过pod分配的ip进行访问
使用yaml创建:
apiVersion: v1
kind: pod
metadata:
labels:
run:mynginx
name:mynginx
namespace:default #在不同的命名空间下创建
spec:
container:
- image:nginx
name:mynginx
- image:ttt
name:myttt
删除:kubectl delete -f pod.yaml
2.多个应用运行在一个pod中
在对应的容器中比如nginx访问tomcat,只要用127.0.0.1:8080即可,同个pod中的不同容器共享网络和存储。注意不能占用相同的接口
3.Deployment
部署的意思
kubectl create deploy mytomcat --image=tomcat:version
#自愈能力,使用kubectl delete pod,使用depoy部署的会自动创建新的
kubectl get deploy //获取所有的deploy
1.多副本命令
kubectl create deploy mytomcat --image=tomcat:version --replicas=3
2.扩缩容
kubectl scale
假如原来有3个my-dep
kubectl scale deploy/my-dep --replicas=5//扩容
kubectl scale deploy/my-dep --replicas=2//缩容
3.自愈和故障转移
挂了,会重启-自愈
机器挂了,这个机器上的所有pod转移到其他机器上,这个叫做故障转移
4.滚动更新
会先部署新的升级版本,然后停掉老的
kubectl get deploy my-dep -oyaml //查看yaml文件中的内容
kubectl set image deploy/my-dep nginx=nginx:1.16.1 --record
5.回滚
#查看某个历史详情
kubectl rollout history deployment/my-dep --revision=2
#回滚到上次
kubectl rollout undo deployment/my-dep
#回滚到指定版本
kubectl rollout undo deploy/my-dep --to-revision=2
4.其他工作负载
3.Servcie
pod的服务发现与负载均衡
1.ClusterIP模式
对于三个pod使用下面的命令:
kubectl expose deploy my-dep --port=8000 --target-port=80 --type=ClusterIP:集群内部访问//暴露这个部署:expose deploy my-dep
#集群内使用servcie的ip:port就可以负载均衡的访问
#也可以使用域名的方式:服务名.所在的名称空间.svc my-dep.default.svc
curl my-dep.default.svc:8000//也可以访问
也可以使用yaml文件
apiVersion: v1
kind: service
metadata:
labels:
app: my-dep
name:my-dep
namespace:default #在不同的命名空间下创建
spec:
selector:
app:my-dep
ports:
- port: 80000
protocol:tcp
targetPort:80
2.NodePort模式
kubectl expose deploy my-dep --port=8000 --target-port=80 --type=NodePort //不传默认时集群内部访问模式
同时还会开辟一个30000-32767范围内的一个端口
Nodeport范围:30000-32767之间
4.Ingress
入口的意思,Ingress:Servcie的统一网关入口,所有的请求先到达ingress,由ingress发送至哪个服务,然后由服务负载均衡到对应的pod,如图所示:
order.atguigu.com都会到service a,
user.atguigu.com都会到service b;
atguigu.com/product都会到service c
若user想查订单,就会向servcie a发送请求,直接由service通过负载均衡到pod app=a
pod层的网络和servcie层的网络,在安装k8s的时候设置的。
网络路由就是通过nginx配置的
1.域名访问
rules:路由规则
host:匹配的域名,向这个域名下发送请求
pathType:Prefix,path:"/",表示的意思是匹配所有的host/请求
backend:转给后台,后台服务名叫:hello-server
使用ingress进行配置上图中的路由
kubectl create -f ingress-rule.yaml
kubectl get ingress
kubectl edit ing ingress-host-bar//修改路由配置
2.流量限制
每秒的次数做个限制
当刷新太快后,会返回默认的503,也可以修改这个状态码
5.总结:k8s的网络模型
外部是到达ingress-service-pod
图片取自云原生Java架构师的第一课K8s+Docker+KubeSphere+DevOps的课程截图,侵删