k8s各种资源介绍
k8s最小的资源单位pod
使用私有仓库
- 为了方便节点下载镜像,搭建私有仓库
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry - docker 1.13版镜像加速和信任http私有仓库修改方法:
vim /etc/sysconfig/docker
OPTIONS='--selinux-anabled --log-driver=journald --signature-verification=false --registry-mirror=https://registry.docker-cn.com --insecure-registry=10.0.0.1:5000' - 修改kubelet配置文件,让pod启动的时候拉取的镜像是私有仓库的
vim /etc/kubernetes/kubelet
k8s中pod资源详解
- 查看容器IP地址
docker inspect 容器id|grep -i ipaddress - 查看网络类型
docker inspect 容器id|grep -i network - k8s中创建一个pod资源,控制docker启动两个容器,业务容器nginx,基础pod容器
pod的常用操作
- 创建一个Pod
kubectl create -f nginx_pod.yaml - 查看pod资源列表
kubectl get pods - 查看指定pod
kubectl get pod nginx -o wide - 查看Pod详细信息
kubectl descirbe pod nginx - 删除Pod
kubectl delete pod nginx - 查看pod的帮助文档
kubectl explain pod - 强制删除pod
kubectl delete pod test --force --grace-period=0 - 更新pod
kubectl apply -f nginx_pod.yaml
rc副本控制器(Replication Controller)
Replication Controller的作用
应用托管在Kubernetes之后,Kubernetes需要保证应用能够持续运行,这是RC的工作内容,它会确保任何时间Kubernets中都有
指定数量的Pod在运行。在此基础上,RC还提供了一些更高级的特性,比如滚动升级、升级回滚等。
rc的常用操作
- 获取rc信息
kubectl get rc -o wide - 滚动升级
kubectl rolling-update myweb -f nginx-rc2.yaml --update-period=30s - 回滚
kubectl rolling-update myweb2 -f nginx-rc.yaml --update-period=1s - 中途终端升级
kubectl rolling-update myweb myweb2 --rollback
RC与Pod的关联 --Label(标签选择器)
service资源
运行在k8s中的容器,为什么不能直接为它做端口映射:pod的随机性
- nodeIp:宿主机IP
- clusterIP:10.254.0.0/16这个地址范围在/etc/kubernetes/apiserver中的KUBE_SERVICE_ADDRESSES中配置,负载均衡功能rr轮询 kubectl get all -o wide可以查看到clusterIP的信息
- podIP
创建service
- port:clusterIP的端口
- nodePort:nodeIP的端口
- targetport:podIP的端口
- kubectl describe svc myweb Endpoints可以查看到后端挂了哪些podIP和端口
- 端口映射由kube-proxy自动创建
服务的自动发现
-
kubectl scale rc myweb --replicas=3
将pod变成三个之后,新增的pod会自动加入到service的Endpoints清单里面去 -
修改nodePort的端口范围,默认是30000-32767
vim /etc/kubernetes/apiserver 加KUBE_API_ARGS="--service-node-port-range=10000-60000"
rc和service的总结
- rc保证高可用
- service保证负载均衡
deployment资源
deployment也是保证pod高可用的一种方式,解决了rc的一个痛点,pod升级之后标签名字变了,svc对应标签后面的Endpoints就没了
kubectl edit svc myweb --修改svc
- 创建deployment
kubectl create -f nginx-deploy.yaml
一个deployment会先起一个rs,然后再起pod - 删除deployment
kubectl delete deployment nginx - 关联service
kubectl expose deployment nginx-deployment --port=80 --type=NodePort - deployment升级
kubectl edit deployment nginx-deployment - deployment回滚
kubectl rollout undo deployment nginx-deployment - 查看历史版本
kubectl rollout history deployment nginx-deployment
deployment最佳实践
- 版本发布
kubectl run nginx --image=10.0.0.11:5000/nginx:1.13 --replicas=3 -record - 版本升级
kubectl set image deploy nginx nginx=10.0.0.1:5000/nginx:1.15 - 历史版本查询
kubectl rollout history deployment nginx - 回滚到指定版本
kubectl rollout undo deployment nginx --to-revision=1
k8s中不同类型的pod之间如何相互访问
通过clusterIP访问
网友评论