//雪花飘落特效 //右上角github跳转   

1

第一天:
上午

Master节点:
	etcd:存储整个集群元数据
	kube-apiserver: k8s组件通信接口,通过http/https协议通信
	kube-scheduler:
	kube-controller-manager:
		Route Controller
		Service Controller
		Deployment Controller
		Volume Controller
		Node Controller
		ReplicaSet Controller
		Daemonset Controller
		StatefulSet controller
	    ........等
Node节点:
	kube-proxy:
	kubelet: 包含三个接口
		CNI:容器网络接口,提供容器网络功能
		CSI:容器存储接口,提供容器存储功能
		CRI:容器运行时接口,提供容器接口功能
	pod是k8s最小单元,一个pod内可以运行多个容器。

运行应用:
	Controller
	apiService

声明式配置:【面向对象】 k8s中的配置项采用的声明式配置。
	简单的理解就好比打车,直接告诉司机目的地去万达。至于司机怎么加油,转弯,踩刹车整个过程我们不用关心,我们只用关心成功到达目的万达就可以。

过程式配置:【面向过程】
	 同样是打车,上了车之后要告诉师傅,起步,踩油门,打方向,然后再右拐,最后告诉师傅下车我到万达了。
	 
ApiService	 
  Controller对象 [RS(ReplicaSet)/Deployment/Daemonset/StatefulSet/job/cronjob/]
	 Service对象 [Sevice Pod资源调度器]
		label Selector标签选择器				
		   pod定义label
		       定义多个pod
			   			   
kubeadm部署k8s
	master节点:
		kube-apiserver,kube-controller-manager,kube-scheduler,etcd
		
	worker节点:
		kubelet,kube-proxy,docker
			   
	要点:每个节点都要部署docker,kubelet,kubeadm,kubectl可以单独在管理节点中部署。

阿里云镜像仓库:
https://developer.aliyun.com/mirror
https://developer.aliyun.com/mirror/kubernetes?spm=a2c6h.13651102.0.0.3e221b11IzX5Le

  kubeadm init --help #查看安装过程
  
  swapoff -a
  kubeadm config images pull #提前下载好镜像
  
  kubeadm init --image-repository registry.aliyuncs.com/google_containers \
			   --kubernetes-version v1.19.4 \
			   --control-plane-endpoint kubeapi.magedu.com \
			   --apiserver-advertise-address 192.168.10.1 \ #master节点IP
			   --pod-network-cidr 10.244.0.0/16 \ #flannel和calico默认网段不一样
			   --token--ttl 0 #永不过期
			   
kubectl get cs #查看控制组件是否Running 1.19+之后这个命令被废弃
kubectl api-resources #查看所有资源。
kubeadm reset #清理当前集群

	   
docker 默认Cgroup Driver为cgroup,但是在kubernetes1.14之后的版本推荐使用systemd,对于18.x.x版本的docker来说是相对比较简单的,只需要修改/etc/docker/daemon.json的配置就可以配置docker的cgroup驱动。
vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
  "exec-opts": ["native.cgroupdriver=systemd"],  #只需要这一个配置即可。
  "max-concurrent-downloads": 20,
  "log-driver": "json-file",
  "log-level": "warn",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
    },
  "data-root": "/var/lib/docker"
}

time docker pull node:latest  #可以测试镜像下载速度

vim /etc/sysctl.d/k8s.conf #新增配置,解决node节点部署失败问题。
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1

sysctl -p 
sysctl -a 

kubectl create deployment demoapp --image='ikubernetes/demoapp:v1.0' --dry-run=client #测试运行
kubectl create deployment demoapp --image='ikubernetes/demoapp:v1.0'

kubect scale deployment demoapp --replicas=3 #把刚刚生产的pod,扩容到3副本。
kubectl create service clusterip demoapp --tcp=80:80	 #pod删除后ip会改变,可以创建server,通过server来访问对应的pod
	

	
下午	
	
	底层平台,Hardware,OS,
	镜像:分层构建,aufs,overlaysf2,
	
	k8s上的运行的组件:	
	master node
			API Server #所有的交互已apiserver为中心。
			Controller Manager
			Scheduler
			Etcd
	worker node
			kubelet
			kube-proxy
			container engine
	Add-ons
			KubeDNS:CoreDNS
			Dashboard,Web UI
			监控系统:prometheus
			日志系统:EFK,LG
			Ingress Controller

第二天,第一节
		
		docker:network,IPC,UTS
		
		
		
	命令式命令:
		命令,及其选项(从选项中读取配置数据)来实现
	命令式配置文件:
		命令,从配置文件加载配置数据
	声明式配置文件:
		声明式命令,从配置文件加载配置数据。
	
YAML--->JSON
apiVersion: ... #资源对象所属的API群组及版本
kind: ...       #资源类型
metadata:
  ...           #资源对象的元数据
spec:
  ...           #所需状态,或称为期望状态
status:
  ...           #暂且忽略。
	
查看k8s中API群组及版本:
kubectl get api-versions 

查看pod详细解释:
kubectl explain pod 		
		
vim myspod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod
  labels:
    app: mypod
    release: canary
spec: 
  containers:
  - name: demoapp
    image: ikubernetes/demoapp:v1.0
		
		
	
# k8s中存在三种网络模型;
        节点网络、集群网络(service网络)、pod网络;
# k8s 5中通信模型:        
        同一pod内容器间通信、同一节点pod到间pod通信、跨主机间pod通信、pod到service通信、集群外部到service的通信;

1,第一类客户端        
 Application clients--->NodePort--->Service--->pod
 Application Clients--->Ingress--->pod   #中间借助Service来找到对应的pod,直接通过Ingress和pod通信
 
2,第二类客户端
 Developers/Operators--->Apiserver--->pod client   #对集群做一些增删改查操作等	
	RESTful API,Https
        资源类型,schema
            Pod,Deployment,Service
        对象,object
        资源规范
            apiVersion,Kind,metadata,spec(期望状态),status(实际状态)...
            控制器:负责确保将实际状态这顶不断逼近或等同于期望状态
            Control Loop:如果实际状态和期望状态不一致,会启动控制循环,至到一致。
                create,delete,change,
			   


namespace级别资源:			   
    工作负载型资源(workload),Pod
        stateful,stateless,
        Deployment,DaemonSet,StatefulSet-->Operator
        Job,Cronjob,
    服务发现和负责均衡
        Service,Ingress
    配置和存储
        ConfigMap/Secret
        PVC/PV
        Downward API
        role,rolebinding
    集群级别的资源
        namespace,node,clusterrole
    元数据类型
        LimitRange,...
 
 通过explain命令查看资源类型及所属群组:
    kubectl api-versions #查看所有资源类型
    kubectl explain configmap #查看属于的群组 V1
    kubectl explain deployment #apps/v1群组
    
 通过命令查看资源
    kubeapi.magedu.com:6443/apis/apps/v1/namespaces/default/deployments/demoapp 
                kubeapi.magedu.com:6443 #apiserver监听的地址
                apis #通用名称/核心群组是api开头,其它都是apis
                apps #群组名
                v1   #版本名
                namespaces #指定名称空间
                default    #名称空间名称
                deployments #资源类型名称
                demoapp     #pod名称
                
                /apis/GROUP/VERSION/namespaces/NAMESPACES/{pods,deployments,stateless...}/POD_NAME
    
    kubectl get --raw /apis/apps/v1/namespaces/default/deployments/demoapp  #--raw指以json格式输出
    kubectl get --raw /apis/apps/v1/namespaces/default/deployments/demoapp | jq .  #jq解析json美化输出
    kubectl get --raw /apis/apps/v1/namespaces/default/deployments/demoapp | jq .metadata.name #查看指定资源的value
                                                jq安装,jq在epel源中
                                                yum -y install epel-release
                                                yum -y install jq 
 
curl和kubectl两种请求方式:
 curl kubeapi.magedu.com:6443/apis/apps/v1/namespaces/default/deployments/demoapp #获取失败,应为需要客户端做ca双向认证。否则面向互联,所有人都可以通过我们的apiserver访问,做增删改查。
 kubectl proxy  可以理解为https认证卸载器,可以借助kubectl proxy 和apiservice建立通信。然后本地来访问
 ]# kubectl proxy 
 Starting to serve on 127.0.0.1:8001
 ]# culr 127.0.0.1:8001 #成功加载所有信息
 ]# curl 127.0.0.1:8001/api/v1/namespaces/default/pods/mypod #查看核心群组下pod信息。输出信息是已解析后json美化显示
 
 kubeadm方式部署,认证文件默认保存在/etc/kubernetes/admin.conf,
 需要复制到当前用户家目录下及.kube目录下改名为config才会自动加载授权认证。 
 ]# mkdir -p $HOME/.kube
 ]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 ]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
          
 kubectl -help 
 kubectl options #通过帮助命令获取k8s更多参数含义
        --kubeconfig='' #也可以通过kubectl --kubeconfig=/etc/kubernetes/admin.config get pod 指定config配置文件。
  


------

cat mypod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod
  labels:
    app: mypod      #<map[string]string>
    release: canary #<map[string]string>
spec:
  containers:
  - name: demoapp   #<[]Object>
    image: ikubernetes/demoapp:v1.0
  - name: nginx     #<[]Object>
    image: nginx:1.16-alpine
----
    apiVersion、kind、metadata、spec为4个顶级字段,其中最为复杂的就是spec;
    kubectl explain pods 
    kubectl explain '类型名称‘   #来查看每个资源所支持的参数及含义
    
    kubectl explain pods.metadata
                    <string> 字符类型
                    <object> 但凡是对象类型都有2级字段
                    <map[string]string>字典型数据/映射型数据,就是key:value
                    
    kubectl explain pods.spec
                  containers  <[]Object> 在yaml中表示列表,在yaml中以列表可以内嵌多个对象。
                    
    kubectl explain pods.metadata #二级对象用'.'来分割,来查看二级字段支持的参数


kubectl get pods mypod -o yaml --export # --export k8s.1.18之前的版本可以用

资源引用格式:
    <type>/<name>: pods/mypod,deployment/demoapp #同时支持多种不同的资源类型
    <type> <name>: pods mypod,deployment demoapp #如果一次引用多个资源时这中模式就不支持。
        例如: 
             kubectl delete pods/mypod pods/testpod deployment/demoapp
             kubectl delete pods mypod testpod  #同一pods资源类型下可以删除多个pod,不能同时删除不同资源类型下的pod



node资源和pod资源及具体使用方法:





























































































  
 
			   
			   
			   
posted @ 2021-09-26 00:28  农夫运维  阅读(38)  评论(0)    收藏  举报