元月's blog 元月's blog
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多

元月

临渊羡鱼,不如退而结网
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多
  • 容器化

  • K8S

    • 快速了解云原生架构
    • k8s简介与底层原理
    • k8s安装与基本使用
      • 一、K8S集群安装
        • 1.1、安装前准备
        • 1.2、安装前配置
        • 1.3、开始安装
        • 1.4、启动
        • 1.5、卸载
      • 二、K8S快速实战
        • 2.1、kubectl命令使用
        • 2.2、创建一个Tomcat应用程序
        • 2.3、创建一个service
        • 2.4、扩缩容
        • 2.5、滚动升级与回滚
        • 2.6、标签的使用
      • 三、K8S资源清单
        • 3.1、创建deployment资源
        • 3.2、创建service资源
        • 3.3、针对已有资源输出资源清单yaml
      • 四、部署相关问题排查
        • 3.1、K8S 上部署服务失败了怎么排查?
        • 3.2、K8S 上部署的服务不正常怎么排查?
    • k8s核心概念与高级特性
    • Dashboard安装和使用
  • 云原生
  • K8S
元月
2023-02-07
目录

k8s安装与基本使用

# 一、K8S集群安装

搭建K8S集群,准备三台2核4G的虚拟机(内存至少2G以上),操作系统选择用centos 7以上版本,先在三台机器上安装docker

# 1.1、安装前准备

#1、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

#2、关闭 selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久关闭
setenforce 0 # 临时关闭

#3、关闭 swap
swapoff -a # 临时关闭
vim /etc/fstab # 永久关闭
#注释掉swap这行
# /dev/mapper/centos-swap swap                    swap    defaults        0 0

systemctl reboot  #重启生效
free -m  #查看下swap交换区是否都为0,如果都为0则swap关闭成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 1.2、安装前配置

#4、给三台机器分别设置主机名 hostnamectl set-hostname <hostname>
#k8s-master\k8s-node1\k8s-node2
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2

#5、在 k8s-master机器添加hosts,执行如下命令,ip需要修改成你自己机器的ip
cat >> /etc/hosts << EOF
172.16.93.5 k8s-master
172.16.93.6 k8s-node1
172.16.93.7 k8s-node2
EOF

#6、将桥接的IPv4流量传递到iptables
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl --system # 生效

#7、设置时间同步
yum install ntpdate -y
ntpdate time.windows.com

#8、添加k8s yum源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

# 1.3、开始安装

#10、查看可以安装的版本
yum list kubelet --showduplicates | sort -r

#11、安装kubelet、kubeadm、kubectl 指定版本,我们使用kubeadm方式安装k8s集群
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

#12、开机启动kubelet
systemctl enable kubelet
systemctl start kubelet
1
2
3
4
5
6
7
8
9

# 1.4、启动

在k8s-master机器上执行初始化操作(172.16.93.5 换成自己的ip)

kubeadm init --apiserver-advertise-address=172.16.93.5 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
1

可以通过 kubereset 重置

执行完后结果如下图:

在k8s-master机器上执行如下命令:

#配置使用 kubectl 命令工具(类似docker这个命令),执行上图第二个红框里的命令,kubectl通过https和k8s进行连接认证,此处配置了https相关的配置
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

#查看kubectl是否能正常使用
kubectl get nodes

#安装 Pod 网络插件
kubectl apply -f https://docs.projectcalico.org/mani-fests/calico.yaml
# 如果上面这个calico网络插件安装不成功可以试下下面这个
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# kubectl apply -f http://media.ruanyou.top/blog/config/kube-flannel.yml
1
2
3
4
5
6
7
8
9
10
11
12
13

在所有k8s node机器执行上图第三个红框里的命令

# 将node节点加入进master节点的集群里,复制上图第三个红框里的命令执行
kubeadm join 172.16.93.5:6443 --token d3cdv0.66lb4be0w83ut6ad \
    --discovery-token-ca-cert-hash sha256:253b7c2203fed3cdece278550f089540700001e16c4a53d208ddf719ac4453f5
1
2
3

在k8s-master机器执行查看节点命令

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES    AGE     VERSION
k8s-master   Ready    master   8m30s   v1.18.0
k8s-node1    Ready    <none>   5m11s   v1.18.0
k8s-node2    Ready    <none>   40s     v1.18.0
1
2
3
4
5

刚刚安装的三个k8s节点都已经准备就绪,大功告成!

补充:如果node节点添加进集群失败,可以删除节点重新添加

要删除 k8s-node1 这个节点,首先在 master 节点上依次执行以下两个命令

kubectl drain k8s-node1 --delete-local-data --force --ignore-daemonsets
kubectl delete node k8s-node1
1
2

执行后通过 kubectl get nodes 命令可以看到 k8s-node1 已被成功删除

接着在 k8s-node1 这个 Node 节点上执行如下命令,这样该节点即完全从 k8s 集群中脱离开来,之后就可以重新执行命令添加到集群

kubeadm reset
1

# 1.5、卸载

yum remove -y kubelet kubeadm kubectl
1

# 二、K8S快速实战

用K8S部署Nginx

在k8s-master机器上执行

# 创建一次deployment部署
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort  # --port是service的虚拟ip对应的端口
1
2
3
# 查看Nginx的pod和service信息
[root@k8s-master ~]# kubectl get pod,svc -o wide -l app=nginx
NAME                        READY   STATUS    RESTARTS   AGE   IP           NODE        NOMINATED NODE   READINESS GATES
pod/nginx-f89759699-2v8rj   1/1     Running   0          80s   10.244.2.7   k8s-node2   <none>           <none>

NAME            TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE   SELECTOR
service/nginx   NodePort   10.96.60.110   <none>        80:32575/TCP   73s   app=nginx
1
2
3
4
5
6
7

访问Nginx地址: http://任意节点的ip:图中Nginx的对外映射端口

# 2.1、kubectl命令使用

kubectl是apiserver的客户端工具,工作在命令行下,能够连接apiserver实现各种增删改查等操作 kubectl官方使用文档 (opens new window)

# 2.2、创建一个Tomcat应用程序

使用 kubectl create deployment 命令可以创建一个应用部署deployment与Pod

#my-tomcat表示pod的名称 --image表示镜像的地址 
[root@k8s-master ~]# kubectl create deployment my-tomcat --image=tomcat:7.0.75-alpine
deployment.apps/my-tomcat created
1
2
3

查看一下deployment的信息

[root@k8s-master ~]# kubectl get deployment
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
my-tomcat   1/1     1            1           6m
1
2
3

获取pod的信息,-o wide 表示更详细的显示信息

[root@k8s-master ~]# kubectl get pod -o wide
NAME                         READY   STATUS    RESTARTS   AGE     IP           NODE        NOMINATED NODE   READINESS GATES
my-tomcat-685b8fd9c9-lkdbj   1/1     Running   0          6m18s   10.244.1.2   k8s-node1   <none>           <none>
1
2
3

查看Pod打印的日志

[root@k8s-master ~]#  kubectl logs my-tomcat-685b8fd9c9-lkdbj
1

进入Pod容器内部并执行bash命令,如果想退出容器可以使用exit命令

[root@k8s-master ~]# kubectl exec -it my-tomcat-685b8fd9c9-lkdbj -- sh
/usr/local/tomcat # 
1
2

访问一下这个tomcat pod

集群内访问(在集群里任一worker节点都可以访问)

curl 10.244.1.2:8080
1

当我们在集群之外访问是发现无法访问,那么集群之外的客户端如何才能访问呢?这就需要我们的service服务了,下面我们就创建一个service,使外部客户端可以访问我们的pod

# 2.3、创建一个service

[root@k8s-master ~]#  kubectl expose deployment my-tomcat --name=tomcat --port=8080 --type=NodePort
service/tomcat exposed
1
2
#查看service信息,port信息里冒号后面的端口号就是对集群外暴露的访问接口
AME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE   SELECTOR
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP          37m   <none>
tomcat       NodePort    10.104.10.138   <none>        8080:31950/TCP   82s   app=my-tomcat
1
2
3
4

集群外部访问

使用集群worker节点的ip加上暴露的端口就可以访问:http://172.16.93.5:31950/

service服务有个特点,如果端口暴露类型为NodePort,那么可以通过集群内所有worker主机加暴露的端口进行访问

现在我们来删除刚刚添加的pod,看看会发生什么

#查看pod信息,-w意思是一直等待观察pod信息的变动
[root@k8s-master ~]# kubectl get pod -w
NAME                         READY   STATUS    RESTARTS   AGE
my-tomcat-685b8fd9c9-lkdbj   1/1     Running   0          18m
1
2
3
4

开另外一个命令窗口执行如下命令,同时观察之前命令窗口的变化情况

kubectl delete pod my-tomcat-685b8fd9c9-rw42d
1

我们可以看到之前那个tomcat的pod被销毁,但是又重新启动了一个新的tomcat pod,这是k8s的服务自愈功能,不需要运维人员干预

[root@k8s-master ~]# kubectl get pod -w
NAME                         READY   STATUS    RESTARTS   AGE
my-tomcat-685b8fd9c9-lkdbj   1/1     Running   0          18m
my-tomcat-685b8fd9c9-lkdbj   1/1     Terminating   0          20m
my-tomcat-685b8fd9c9-lp9wd   0/1     Pending       0          0s
my-tomcat-685b8fd9c9-lp9wd   0/1     Pending       0          0s
my-tomcat-685b8fd9c9-lp9wd   0/1     ContainerCreating   0          0s
my-tomcat-685b8fd9c9-lkdbj   0/1     Terminating         0          20m
my-tomcat-685b8fd9c9-lkdbj   0/1     Terminating         0          20m
my-tomcat-685b8fd9c9-lkdbj   0/1     Terminating         0          20m
my-tomcat-685b8fd9c9-lp9wd   1/1     Running             0          20s
1
2
3
4
5
6
7
8
9
10
11

查看下deployment和service的状态

[root@k8s-master ~]# kubectl get deploy,svc
NAME                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/my-tomcat   1/1     1            1           22m

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP          46m
service/tomcat       NodePort    10.104.10.138   <none>        8080:31950/TCP   10m
1
2
3
4
5
6
7

再一次访问service地址,依然可以访问成功

# 2.4、扩缩容

# 扩容到5个pod
[root@k8s-master ~]# kubectl scale --replicas=5 deployment my-tomcat 
deployment.apps/my-tomcat scaled
1
2
3

查看pod信息,发现已经有5个tomcat的pod

[root@k8s-master ~]# kubectl get pod
NAME                         READY   STATUS    RESTARTS   AGE
my-tomcat-685b8fd9c9-6f4xj   1/1     Running   0          11s
my-tomcat-685b8fd9c9-lp9wd   1/1     Running   0          3m4s
my-tomcat-685b8fd9c9-qx27j   1/1     Running   0          11s
my-tomcat-685b8fd9c9-qxc7w   1/1     Running   0          11s
my-tomcat-685b8fd9c9-rjjb2   1/1     Running   0          11s
1
2
3
4
5
6
7

缩容

# 扩容到3个pod 
kubectl scale --replicas=3 deployment my-tomcat     
1
2

# 2.5、滚动升级与回滚

对my-tomcat这个deployment进行滚动升级和回滚,将tomcat版本由tomcat:7.0.75-alpine升级到tomcat:8.0.41-jre8-alpine,再回滚到tomcat:7.0.75-alpine

滚动升级:

kubectl set image deployment my-tomcat tomcat=tomcat:8.0.41-jre8-alpine
1

可以执行 kubectl get pod -w 观察pod的变动情况,可以看到有的pod在销毁,有的pod在创建

kubectl get pod -w
NAME                         READY   STATUS    RESTARTS   AGE
my-tomcat-685b8fd9c9-lp9wd   1/1     Running   0          9m23s
my-tomcat-685b8fd9c9-qx27j   1/1     Running   0          6m30s
my-tomcat-685b8fd9c9-qxc7w   1/1     Running   0          6m30s
my-tomcat-547db86547-fbz9j   0/1     Pending   0          0s
my-tomcat-547db86547-fbz9j   0/1     Pending   0          0s
my-tomcat-547db86547-fbz9j   0/1     ContainerCreating   0          1s
1
2
3
4
5
6
7
8

查看某个pod的详细信息,发现pod里的镜像版本已经升级了

kubectl describe pod my-tomcat-547db86547-4btmd
1
Controlled By:  ReplicaSet/my-tomcat-547db86547
Containers:
  tomcat:
    Container ID:   docker://af9139bd3e29dda7bea7f01b4280d607a01a54d2eff99e2cf32bdce4e7d41fb7
    Image:          tomcat:8.0.41-jre8-alpine
    Image ID:       docker-pullable://tomcat@sha256:17b2137b86c64013a03047e4c90b7dc63aebb7d1bd28641539d38ff00281ab9e
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Tue, 07 Mar 2023 04:10:28 -0500
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-qbbvm (ro)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

访问下tomcat,看到版本也已经升级

版本回滚:

查看历史版本

[root@k8s-master ~]# kubectl rollout history deploy my-tomcat
deployment.apps/my-tomcat 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
1
2
3
4
5

回滚到上一个版本

##--to-revision 参数可以指定回退的版本
[root@k8s-master ~]# kubectl rollout undo deployment my-tomcat
deployment.apps/my-tomcat rolled back
1
2
3

再次访问tomcat,发现版本已经回退

# 2.6、标签的使用

通过给资源添加Label,可以方便地管理资源(如Deployment、Pod、Service等)。

查看Deployment中所包含的Label

[root@k8s-master ~]# kubectl describe pod my-tomcat-547db86547-cdgb6
Name:         my-tomcat-547db86547-cdgb6
Namespace:    default
Priority:     0
Node:         k8s-node1/172.16.93.6
Start Time:   Tue, 07 Mar 2023 04:09:44 -0500
Labels:       app=my-tomcat
              pod-template-hash=547db86547
Annotations:  <none>
Status:       Running
IP:           10.244.1.5
1
2
3
4
5
6
7
8
9
10
11

通过Label查询Pod

[root@k8s-master ~]#  kubectl get pods -l app=my-tomcat
NAME                         READY   STATUS    RESTARTS   AGE
my-tomcat-685b8fd9c9-b852j   1/1     Running   0          3m15s
my-tomcat-685b8fd9c9-jlbpm   1/1     Running   0          3m18s
my-tomcat-685b8fd9c9-ztfrx   1/1     Running   0          3m16s
1
2
3
4
5

通过Label查询Service

[root@k8s-master ~]# kubectl get services -l app=my-tomcat
NAME     TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
tomcat   NodePort   10.104.10.138   <none>        8080:31950/TCP   26m
1
2
3

给Pod添加Label

[root@k8s-master ~]# kubectl label pod my-tomcat-685b8fd9c9-b852j version=v1 
pod/my-tomcat-685b8fd9c9-b852j labeled
1
2

查看Pod的详细信息,可以查看Label信息:

[root@k8s-master ~]# kubectl describe pods my-tomcat-685b8fd9c9-b852j
Name:         my-tomcat-685b8fd9c9-b852j
Namespace:    default
Priority:     0
Node:         k8s-node1/172.16.93.6
Start Time:   Tue, 07 Mar 2023 04:13:45 -0500
Labels:       app=my-tomcat
              pod-template-hash=685b8fd9c9
              version=v1
1
2
3
4
5
6
7
8
9

通过Label查询Pod

[root@k8s-master ~]# kubectl get pods -l version=v1 
NAME                         READY   STATUS    RESTARTS   AGE
my-tomcat-685b8fd9c9-b852j   1/1     Running   0          6m13s
1
2
3

通过Label删除服务

[root@k8s-master ~]#  kubectl delete service -l app=test-service
No resources found
1
2

小总结:

kubectl create deployment       #创建一个deployment来管理创建的容器
kubectl get       #显示一个或多个资源,可以使用标签过滤,默认查看当前名称空间的资源
kubectl expose    #将一个资源暴露为一个新的kubernetes的service资源,资源包括pod (po), service (svc), replicationcontroller (rc),deployment(deploy), replicaset (rs)
kubectl describe  #显示特定资源或资源组的详细信息
kubectl scale     #可以对Deployment, ReplicaSet, Replication Controller, 或者StatefulSet设置新的值,可以指定一个或多个先决条件
kubectl set       #更改现有的应用程序资源
kubectl rollout   #资源回滚管理       
1
2
3
4
5
6
7

以上就是kubectl命令行下一些简单的操作,主要是让我们对kubernetes有一个快速的认识。

# 三、K8S资源清单

之前我们直接用命令创建deployment,pod,service这些资源,其实在k8s中,我们一般都会使用yaml格式的文件来创建符合我们预期期望的资源,这样的yaml文件我们一般称为资源清单

资源清单yaml的格式

apiVersion: group/apiversion  # 如果没有给定group名称,那么默认为croe,可以使用kubectl api-versions 获取当前k8s版本上所有的apiVersion版本信息(每个版本可能不同)
kind:       #资源类别
metadata:  #资源元数据
   name
   namespace  #k8s自身的namespace
   lables
   annotations   #主要目的是方便用户阅读查找
spec:期望的状态(disired state)
status:当前状态,本字段由kubernetes自身维护,用户不能去定义
#配置清单主要有五个一级字段,其中status字段用户不能定义,由k8s自身维护
1
2
3
4
5
6
7
8
9
10

# 3.1、创建deployment资源

我们可以用创建deployment的命令加上参数 --dry-run=client -o yaml 就可以输出这次部署的资源清单yaml

[root@k8s-master ~]# kubectl create deployment my-tomcat --image=tomcat:7.0.75-alpine --dry-run=client -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: my-tomcat
  name: my-tomcat
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-tomcat
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: my-tomcat
    spec:
      containers:
      - image: tomcat:7.0.75-alpine
        name: tomcat
        resources: {}
status: {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

我们可以对上面的yaml适当的修改下保存为文件deployment-demo.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: my-tomcat-yaml
  name: my-tomcat-yaml  #修改deployment的名称
spec:
  replicas: 2  #修改pod副本为两个
  selector:
    matchLabels:
      app: my-tomcat-yaml
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: my-tomcat-yaml
    spec:
      containers:
      - image: tomcat:7.0.75-alpine
        name: tomcat
        resources: {}
status: {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

然后执行如下命令就可以用yaml文件来创建这次部署

kubectl apply -f deployment-demo.yaml 
1

# 3.2、创建service资源

[root@k8s-master ~]# kubectl expose deployment my-tomcat --name=tomcat --port=8080 --type=NodePort --dry-run=client -o yaml 
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: my-tomcat
  name: tomcat
spec:
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: my-tomcat
  type: NodePort
status:
  loadBalancer: {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

修改下上面yaml内容,保存为文件:service-demo.yaml

apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: my-tomcat-yaml
  name: tomcat-service-yaml  #修改service名称
spec:
  ports:
  - port: 80  # service的虚拟ip对应的端口,在集群内网机器可以访问用service的虚拟ip加该端口号访问服务
    nodePort: 30001  # service在宿主机上映射的外网访问端口,端口范围必须在30000-32767之间
    protocol: TCP
    targetPort: 8080  # pod暴露的端口,一般与pod内部容器暴露的端口一致
  selector:
    app: my-tomcat-yaml
  type: NodePort
status:
  loadBalancer: {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

然后执行命令如下命令就可以用yaml文件来创建service

  kubectl apply -f service-demo.yaml 
1

# 3.3、针对已有资源输出资源清单yaml

查看pod资源列表

[root@k8s-master ~]# kubectl get pod
NAME                              READY   STATUS    RESTARTS   AGE
my-tomcat-685b8fd9c9-b852j        1/1     Running   0          27m
my-tomcat-685b8fd9c9-jlbpm        1/1     Running   0          27m
my-tomcat-685b8fd9c9-ztfrx        1/1     Running   0          27m
my-tomcat-yaml-685b8fd9c9-jvzc5   1/1     Running   0          4m48s
my-tomcat-yaml-685b8fd9c9-rx9pw   1/1     Running   0          4m48s
nginx-f89759699-2v8rj             1/1     Running   0          18m
1
2
3
4
5
6
7
8

将资源的配置以yaml的格式输出出来

#使用 -o 参数加yaml,可以将资源的配置以yaml的格式输出出来,也可以使用json,输出为json格式
kubectl get pod nginx-deploy-7db697dfbd-2qh7v -o yaml 
1
2

# 四、部署相关问题排查

# 3.1、K8S 上部署服务失败了怎么排查?

kubectl describe ${RESOURCE} ${NAME}
1

拉到最后看到Events部分,会显示出 K8S 在部署这个服务过程的关键日志。一般来说,通过kubectl describe pod ${POD_NAME}已经能定位绝大部分部署失败的问题了,当然,具体问题还是得具体分析。

# 3.2、K8S 上部署的服务不正常怎么排查?

如果服务部署成功了,且状态为running,那么就需要进入 Pod 内部的容器去查看自己的服务日志了:

  • 查看 Pod 内部容器打印的日志:
kubectl logs ${POD_NAME} 
1
  • 进入 Pod 内部某个 container:
kubectl exec -it [options] ${POD_NAME} -c ${CONTAINER_NAME} [args]
1

这个命令的作用是通过 kubectl 执行了docker exec xxx进入到容器实例内部。之后,就是用户检查自己服务的日志来定位问题。

#k8s
k8s简介与底层原理
k8s核心概念与高级特性

← k8s简介与底层原理 k8s核心概念与高级特性→

最近更新
01
otter二次开发-支持按目标端主键索引Load数据
08-03
02
mvnw简介
06-21
03
gor流量复制工具
06-03
更多文章>
Theme by Vdoing | Copyright © 2022-2024 元月 | 粤ICP备2022071877号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式