739259167
apiVersion: apps/v1 # 声明版本
kind: Deployment # 声明资源单位(POD、Deployment)
# kind: ReplicationController
metadata: # 定义标签
name: nginx-deployment # 名字
labels: # 标签
app: nginx # app叫什么名字
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx # 定义容器的名字
image: nginx:1.13.12 # 如果本地镜像没有会到hub上pull
ports:
- containerPort: 80 # 容器的端口
flannel:用于创建容器之间的网段
docker命令:---------------------------------------------
# 导入镜像:
docker load -i xxx.tar.gz
# 创建docker 私有仓库:
docker run -d -p 5000:5000 --restart=always --name registry -v /myregistry:/var/lib/registry registry
# 上传镜像到私有仓库:
# 先打tag
docker tag mirrorgooglecontainers/pause-amd64:3.0 127.0.0.1:5000/mirrorgooglecontainers/pause-amd64:latest
# 再上传
docker push 127.0.0.1:5000/mirrorgooglecontainers/pause-amd64
K8S命令:---------------------------------------------
K8S中创建一个pod资源,控制docker启动两个容器,一个业务容器、一个pod容器
普通的业务容器 + pod容器构成了K8S的核心功能:自动部署、自动发现、故障自愈。
# 查看node节点
kubectl get nodes
# 创建pod资源单位
kubectl create -f nginx_pod.yaml
pod/nginx created (如果报错,修改apiserver 删掉组件:ServerAccount)
# 查看有哪些pod?
kubectl get pod (-o wide)
# 查看pod的详细信息?
kubectl describe pod nginx
kubectl get pod nginx -o wide(可以查看到 NUDE列,表示分配到哪个node上,由master的scheduler调度分配)
# 如何删除pod资源?
kubectl delete pod nginx (--force强制删除)
# 指定配置文件更新pod资源 (不好使)
kubectl apply -f xxx.yaml
RC控制器:ReplicationController---------------------------------------------
创建Pod,高可用
kubectl get rc
# 创建 Rc。kubectl create -f nginx_rc.yaml
[root@centos7 rc]# cat nginx_rc.yaml
apiVersion: v1 # 声明版本
kind: ReplicationController # 声明资源单位(POD、Deployment)
metadata: # 定义标签
name: myweb # 名字
spec:
replicas: 2
selector:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: myweb # 定义容器的名字
image: nginx:1.13.12 # 如果本地镜像没有会到hub上pull
ports:
- containerPort: 80 # 容器的端口
# rc升级
[root@centos7 rc]# kubectl rolling-update myweb -f nginx_rc_2.yaml --update-period=10s
Command "rolling-update" is deprecated, use "rollout" instead
Created myweb2
Scaling up myweb2 from 0 to 2, scaling down myweb from 2 to 0 (keep 2 pods available, don’t exceed 3 pods)
Scaling myweb2 up to 1
Scaling myweb down to 1
Scaling myweb2 up to 2
Scaling myweb down to 0
Update succeeded. Deleting old controller: myweb
Renaming myweb2 to myweb
replicationcontroller/myweb rolling updated
# 回滚
[root@centos7 rc]# kubectl rolling-update myweb -f nginx_rc_2.yaml --update-period=10s
Deployment资源:解决RC的痛点 ---------------------------------------------
在升级过程中pod资源无法跟着升级,需要手动修改svc 关联的 pod标签,那么deployment就很好的解决了这个问题。
[root@centos7 deploy]# cat nginx_deployment.yaml
apiVersion: extensions/v1beta1 # 声明版本
kind: Deployment # 声明资源单位(POD、Deployment)
metadata: # 定义标签
name: nginx-deployment # 名字
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx # 定义容器的名字
image: nginx:1.13.12 # 如果本地镜像没有会到hub上pull
ports:
- containerPort: 80 # 容器的端口
# 创建好deployment之后 关联 service资源
kubectl expose deployment nginx-deployment --port=80 --type=NodePort
# 如果要对deployment中pod资源升级,可以直接修改edit
kubectl edit deployment,可以对nginx版本修改
# 也可以用命令
kubectl set image deployment nginx nginx=nginx
# 如果要回滚:
kubectl rollout undo deployment nginx-deployment
# 回滚到指定版本
kubectl rollout undo deployment nginx-deployment --to-version=1
# 查看有哪些历史版本?(如果记录镜像版本,要用命令发布和升级)
kubectl rollout history deployment nginx-deployment
# 版本发布:
kubectl run nginx --image=nginx --replicas=3 --record
# 删除
kubectl delete deployment nginx
service资源:---------------------------------------------
node ip:宿主机IP
cluster ip:类似于一个vip,负载均衡调度pod ip
pod ip:通过rc控制器创建的每个pod
# 查看全部pod信息
kubectl get all
# 创建一个server资源:
[root@centos7 svc]# cat nginx_svc.yaml
apiVersion: v1 # 声明版本
kind: Service # 声明资源单位(POD、Deployment)
metadata: # 定义标签
name: myweb # 名字
spec:
type: NodePort
ports:
- port: 80 # cluster ip port
nodePort: 30000 # port = 30000
# 如果需要修改为其他的,修改apiserver配置文件
# --service-node-port-range=20000-40000
# 指定cluster ip --service-cluster-ip-range=10.1.0.0/16
targetPort: 80
selector:
app: myweb2 # 与RC标签关联
[root@centos7 svc]# kubectl create -f nginx_svc.yaml
# 查看创建的svc资源
kubectl describe svc myweb (Endpoints: 10.2.76.19:80,10.2.76.20:80)
# server的自动发现,
kubectl scale rc myweb --replicas=3
kubectl describe svc myweb(会发现第三个pod会自动加入到svc负载均衡Endpoints 中)
# 生成测试文件,并放入pod中
[root@centos7 svc]# echo "node" > index.html
[root@centos7 svc]# kubectl cp index.html myweb-d8rkg:/usr/share/nginx/html/index.html
tomcat + mysql小练习 ---------------------------------------------
xxxx
K8S 附加组件 DNS 服务 ---------------------------------------------
# 查看所有名称空间的pod
kubectl get pods --all-namespaces
namespaces 名称空间:---------------------------------------------
# 类似于不同的账号,使用namespaces的作用:资源隔离。
KS8中的存储:PV 和 PVC ---------------------------------------------
# 共享存储 yum -y install nfs-utils
vim /etc/exports
rpcbind 服务启动
K8S总结;---------------------------------------------
- K8Syum安装
- K8S常用资源(pod、rc、deploy、svc)
- K8S附加组件 dns、dashboard、heapster
- K8S弹性伸缩
- K8S配合NFS盒Gluster实现持久化
- K8S配合Jenkins 实现一键发布和回滚