k8s实战入门

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值