K8S学习笔记

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 实现一键发布和回滚
posted @ 2019-11-17 17:41  GeminiMp  阅读(184)  评论(0编辑  收藏  举报