1. Namespace:kubernetes在集群启动后,会默认创建几个namespace:
[root@master ~]# kubectl get ns
NAME STATUS AGE
default Active 31h #所有未指定Namespace的对象都会被分配在default命名空间
kube-node-lease Active 31h #集群节点之间的心跳维护
kube-public Active 31h #此命名空间下的资源可以被所有人访问
kube-system Active 31h #所有由kubernetes系统创建的资源都处于这个命名空间
1>. 查看namespace资源:
## 查看所有的ns:
[root@master ~]# kubectl get ns
## 查看指定的ns:
[root@master ~]# kubectl get ns default
## 查看指定的ns并且按照指定输出格式显示:
## 输出格式:wide(宽格式) json(json格式) yaml(yaml格式)
[root@master ~]# kubectl get ns default -o wide/json/yaml
## 查看ns详情:
[root@master ~]# kubectl describe ns default
2>. 创建namespace资源:
[root@master ~]# kubectl create ns dev
[root@master ~]# kubectl create -f ns-dev.yml
3>. 删除namespace资源:
[root@master ~]# kubectl delete ns dev
[root@master ~]# kubectl delete -f ns-dev.yml
2. Pod:Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。
Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器。kubernetes在集群启动之后,集群中的各个组件也都是以Pod方式运行的。
1>. 查看pod资源:
[root@master ~]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-74586cf9b6-2pj9r 0/1 Running 1 (23h ago) 31h
coredns-74586cf9b6-thv9n 0/1 Running 1 (23h ago) 31h
etcd-master 1/1 Running 1 (23h ago) 31h
kube-apiserver-master 1/1 Running 1 (23h ago) 31h
kube-controller-manager-master 1/1 Running 1 (23h ago) 31h
kube-flannel-ds-bzvhz 1/1 Running 1 (23h ago) 26h
kube-flannel-ds-ksnx6 1/1 Running 1 (23h ago) 26h
kube-flannel-ds-w6drb 1/1 Running 1 (23h ago) 26h
kube-proxy-hpb49 1/1 Running 1 (23h ago) 31h
kube-proxy-lh292 1/1 Running 1 (23h ago) 31h
kube-proxy-s6zrt 1/1 Running 1 (23h ago) 31h
kube-scheduler-master 1/1 Running 1 (23h ago) 31h
2>. 创建并运行pod:kubernetes中没有提供单独运行pod的命令,都是通过pod控制器来实现的。
# 命令格式:kubectl run (pod控制器名称) [参数]
# --image:指定pod镜像
# --port:指定pid端口
# --namespace:指定namespace
[root@master ~]# kubectl run nginx --image=nginx:1.17.1 --port=80 --namespace dev
3>. 查看pod信息:
## 查看pod基本信息:
[root@master ~]# kubectl get pod -n dev
## 查看pod详细信息:
[root@master ~]# kubectl describe pod nginxpod -n dev
4>. 访问pod:
## 获取podIP
[root@master ~]# kubectl get pod -n dev -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginxpod 2/2 Running 0 4h39m 10.224.1.7 slave1 <none> <none>
## 访问pod
[root@master ~]# curl 10.224.1.7
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
5>. 删除指定pod:
## 删除指定pod
[root@master ~]# kubectl delete pod nginxpod -n dev
[root@master ~]# kubectl delete -f nginx.yml
3. Label:Label是kubernetes系统中的一个重要概念。它的作用就是在资源上添加标识,用来对它们进行区分和选择。Label的特点∶
· 一个Label会以key/value键值对的形式附加到各种对象上,如Node、Pod、Service等。
· 一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上去。
· Label通常在资源对象定义时确定,当然也可以在对象创建后动态添加或者删除。
可以通过uabel实现资源的多维度分组,以便灵活、方便地进行资源分配、调度、配置、部署等管理工作。
标签定义完毕之后,还要考虑到标签的选择,这就要使用到Label Selector,即∶
Label用于给某个资源对象定义标识
Label Selector用于查询和筛选拥有某些标签的资源对象
当前有两种Label Selector∶
· 基于等式的Label Selector:
name=slave∶选择所有包含Label中key="name"且value="slave"的对象
env != production∶选择所有包括Label中的key="env"且value不等于"production"的对象
· 基于集合的Label Selector:
name in (master,slave);选择所有包含Label中的key="name"且value="master"或"slave"的对象
name not in (frontend)∶选择所有包含Label中的key="name"且value不等于"frontend"的对象
标签的选择条件可以使用多个,此时将多个Label Selector进行组合,使用逗号","进行分隔即可。例如∶
name=slave,envl=production
name not in (frontend),envl=production
1>. 为资源打标签:
## 为pod资源打标签:
[root@master ~]# kubectl label pod nginxpod version=1.0 -n dev
## 为pod资源更新标签:
[root@master ~]# kubectl label pod nginxpod version=2.0 -n dev --overwrite
## 查看标签:
[root@master ~]# kubectl get pod -n dev --show-labels
## 筛选标签:
[root@master ~]# kubectl get pod -n dev -l version=2.0 --show-labels
[root@master ~]# kubectl get pod -n dev -l version!=2.0 --show-labels
2>. 删除标签:
[root@master ~]# kubectl label pod nginxpod version- -n dev
4. Deployment:在kubernetes中,Pod是最小的控制单元,但是kubernetes很少直接控制Pod,一般都是通过Pod控制器来完成的。Pod控制器用于pod的管理,确保pod资源符合预期的状态,当pod的资源出现故障时,会尝试进行重启或重建pod。
# 命令格式:kubectl create deployment deployment名称 [参数]
# --image 指定pod的镜像
# --port 指定端口
# --replicas 指定创建pod数量
# --namespace 指定namespace
[root@master ~]# kubectl create deployment nginx --image nginx --port 80
--replicas 3 -n dev
## 查看创建的pod
[root@master ~]# kubectl get pod -n dev
## 查看deployment的信息:
[root@master ~]# kubectl get deploy -n dev
[root@master ~]# kubectl get deploy -n dev -o wide
[root@master ~]# kubectl describe deploy nginx -n dev
## 删除deployment:
[root@master ~]# kubectl delete deploy nginx -n dev
5. Service:虽然每个Pod都会分配一个单独的Pod IP,然而却存在如下两个问题∶
· Pod IP 会随着Pod的重建产生变化
· Pod IP 仅仅是集群内可见的虚拟IP,外部无法访问
这样对于访问这个服务带来了难度。因此,kuberaetes设计了Service来解决这个问题。
Service可以看作是一组同类Pod对外的访问接口。借助Service,应用可以方便地实现服务发现和负载均衡。
方式一:创建集群内部可访问的Service:
# 暴露Service
[root@master ~]# kubectl expose deploy nginx --name=svc-nginx1 --type=ClusterIP
--port=80 --target-port=80 -n dev
# 查看service
[root@master -]# kubectl get svc svc-nginx -n dev -o wide
这里会产生一个CLUSTER-IP,这就是service的iP,在Service的生命周期中,这个地址是不会变动的
可以通过这个IP访问当前service对应的POD
方式二:创建集群外部也可以访问的Service:
## 上面创建的Service的type类型为ClusterIP,这个ip地址只用集群内部可访问
## 如果需要创建外部也可以访问的Service,需要修改type为NodePort
[root@master ~]# kubectl expose deploy nginx --name=svc-nginx2 --type=NodePort
--port=80 --target-port=80 -n dev
# 此时查看,会发现出现了NodePort类型的Service,而且有一对Port(80∶31928/TC)
[root@master ~]# kubectl get svc svc-nginx -n dev -o wide
# 接下来就可以通过集群外的主机访问 节点IP∶31928访问服务了
# 例如在的电脑主机上通过浏览器访问下面的地址http://192.168.188.113:31928/
6. k8s开启ipvs:
1>. 加载内核模块:
[root@master ~]# lsmod | grep ip_vs
ip_vs_sh 16384 0
ip_vs_wrr 16384 0
ip_vs_rr 16384 0
ip_vs 163840 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack 159744 6 xt_conntrack,nf_nat,xt_nat,nf_conntrack_netlink,xt_MASQUERADE,ip_vs
nf_defrag_ipv6 24576 2 nf_conntrack,ip_vs
libcrc32c 16384 5 nf_conntrack,nf_nat,nf_tables,xfs,ip_vs
2>. 修改kube-proxy配置:
[root@master ~]# kubectl edit configmaps kube-proxy -n kube-system
....
mode: "ipvs" #修改此处,默认为空
....
3>. 删除所有kube-proxy配置,删除后会立刻再次生成kube-proxy:
[root@master ~]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-74586cf9b6-2pj9r 0/1 Running 1 (24h ago) 32h
coredns-74586cf9b6-thv9n 0/1 Running 1 (24h ago) 32h
etcd-master 1/1 Running 1 (24h ago) 32h
kube-apiserver-master 1/1 Running 1 (24h ago) 32h
kube-controller-manager-master 1/1 Running 1 (24h ago) 32h
kube-flannel-ds-bzvhz 1/1 Running 1 (24h ago) 27h
kube-flannel-ds-ksnx6 1/1 Running 1 (24h ago) 27h
kube-flannel-ds-w6drb 1/1 Running 1 (24h ago) 27h
kube-proxy-hpb49 1/1 Running 1 (24h ago) 32h
kube-proxy-lh292 1/1 Running 1 (24h ago) 32h
kube-proxy-s6zrt 1/1 Running 1 (24h ago) 32h
kube-scheduler-master 1/1 Running 1 (24h ago) 32h
[root@master ~]# kubectl delete pod kube-proxy-hpb49 kube-proxy-lh292
kube-proxy-s6zrt -n kube-system
pod "kube-proxy-hpb49" deleted
pod "kube-proxy-lh292" deleted
pod "kube-proxy-s6zrt" deleted
7. 配置自动补全:
[root@master ~]# source /usr/share/bash-completion/bash_completion
[root@master ~]# source <(kubectl completion bash)
[root@master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc