一。kubelet内的结构
1.Namespace:作用是实现多套环境的隔离或者多租户的资源隔离,默认情况下,集群中的所有port都是可以通信的,但是实际上可能不想让两个pod之间相互通信,++这个收可以将两个不同的pot划分到不同的namespace下,k8s通过将集群中内部的资源分配到不同的namespace中++,形成逻辑上的组,以便于资源的隔离
查看空间内的所有namespace:kubectl get ns
查看具体某一个namespace:kubectl get ns dev
查看某一个namespace的详细信息:kubectl describe ns dev
创建一个namespace: kubectl create ns dev
删除一个namespace: kubectl delete ns dev
2.Pod:是k8s集群进行管理的最小单元,++程序要运行必须要部署在容器中,而且必须存在于pod中,Pod可以被认为是容器的封装++,一个Pod中可以存在一个或者多个容器
查看某一个namespace内的容器: kubectl get po -n ++dev++

创建一个pod: kubectl run nginx --image=nginx:1.17.1 --port=80 --namespace ++dev++
删除一个pod:kubectl delete pod nginx -n ++dev++
3.Label:是k8s系统中的一个重要概念,它的作用主要就是在资源上添加标识,用来对他们进行分区和选择
特点:
一个Label会以key/value键值对的形式附加到各种对象上,如node,pod,service等等
一个资源对象可以定义任意数量的Label,同一个label也可以被添加到任意数量的资源对象上
Label通常在资源对象定义时确定,一边灵活的,方便的进行调度
查看标签:kubectl get pod -n dev -o wide --show-labels
添加标签:kubectl label pod nginx ++ver=1.0++-n dev(如果是添加相同的内容,使用--overwrite进行覆盖)
删除标签:kubectl label pod nginx ver- -n dev
筛选标签:kubectl get pod -n dev -l ver=1.0

二。资源管理方式:
1.命令式对象管理:直接使用命令去操作k8s资源
kubelet comand(对资源执行的操作) type(资源类型) name(资源名) flages(额外参数)



例如:
kubectl get po -n kube-system:查看所有pod
kubectl get pod pod_name:查看某个pod
kubectl get ns kube-public -o yaml:查看某个pod,以yaml格式展示结果,或者是json结构
kubectl api-resources:查看资源类型
kubectl run pod --image=nginx -n dev:创建并运行一个nginx的pod
kubectl get pod -n dev:查看新创建的dev
kubectl delete ns dev:删除dev
2.命令式对象配置:通过命令配置和配置文件去操作k8s资源
(1)使用yaml创建一个namespace组
mkdir /test
vim ns.yaml

kubectl create -f ns.yaml:使用yaml创建一个namespace
kubectl get ns:查看namespace的内容,信息

(2)创建一个pod

kubetl apply -f nginx.yaml:使用yaml文件启动pod
kubetl delete -f nginx.yaml:删除pod
kubectl get po -n dev -o wide:查看配置的镜像信息

3.声明式对象配置:通过apply命令和配置文件去操作k8s资源

三。要想其他的node能够使用kubectl命令:
scp -r HOME/.kube/ 主机名:HOME/

四。k8s的控制器
Deployment:在k8s中,pod是最小的控制单元,但是k8s很少直接控制pod,一般都是通过pod控制器来完成的,pod控制器相当于pod的管理,确保pod资源符合预期的状态,当pod的资源出现故障的时候,会尝试重启或者重建pod
1.创建一个控制器:kubectl create deployment nginxpod --image nginx:1.17.1 --replicas 3 --port=80 -n dev(--replicas 3:创建副本数量为3)
2.查看状态:kubectl get deployments.apps -n dev

3.查看详细内容:kubectl get po -n dev -o wide

4.删除一个内容:kubectl delete pod nginxpod-d97444cb8-krbwk -n dev
注释:当删除了一个pod后,会重新创建一个pod,因为控制器的存在,且副本数量为3,会维持副本数量在3个
5.生成一个yaml文件:kubectl create deployment nginxpod --image nginx:1.17.1 --replicas 3 --port=80 -n dev --dry-run=client -o yaml > nginx-deploy.yaml
五。service配置
目的:在集群内部的ip不能进行访问,通过service将ip进行暴露服务,供外界访问,Service可以看作一组同类的pod对外的访问接口,借助service,应用可以方便地实现服务发现和负载均衡,++生成的ip可以外界访问,通过--type=Node++++Port生成的端口,pod容器也可以直接访问++
1.添加暴露端口:kubectl expose deployment nginxpod --name=svc-ng2 --type=NodePort --port=80 --target-port=80 -n dev
注释:当服务类型设置为 NodePort 时,Kubernetes 会在集群内每个节点上开放一个端口,--port 参数指定的是服务所监听的端口,--target-port 参数指定的是服务将流量转发到后端 Pod 时所使用的端口
2.查看service:kubectl get svc -n dev:

3.删除暴露端口:kubectl delete svc svc-ng1 -n dev
4.生成yaml文件:kubectl expose deployment nginxpod --name=svc-ng2 --type=NodePort --port=80 --target-port=80 -n dev --dry-run=client -o yaml > svc-ng2.yaml
5.测试是否成功:

4.进入其中一个pod:exec -it nginxpod-d97444cb8-krbwk -n dev -- bash
当以上三个pod配置好页面后,cuel svc的ip即可进行负载均衡(如上的curl 10.108.45.141,或者curl http://172.18.140.200:30368也可以进行负载均衡)
六。k8s开启ipvs
- yum install ipvsadm:下载软件
2.lsmod | grep ip_vs:查看是否有ipvsadm的模块

3.kubectl edit configmap kube-proxy -n kube-system:编辑文件

4.kubectl get pod -n kube-system
5.kubectl get pods -n kube-system | grep kube-proxy:过滤查看是否有负载均衡内容
6.kubectl delete pod -l k8s-app=kube-proxy -n kube-system:删除之前内容
kubectl get pod -n kube-system -l k8s-app=kube-proxy:查看
注释:-l 是 --selector 的简写形式,用于通过标签选择器来筛选资源。k8s-app=kube-proxy 表示筛选出带有 k8s-app 标签且值为 kube-proxy 的 Pod。kube-proxy 是 Kubernetes 网络代理,其功能是在节点上实现网络规则,让 Pod 能够与服务进行通信,删除后会重新建立
7.ipvsadm -Ln:查看结果
