k8s核心实战

1、资源创建方式:

● 命令行 ● YAML


2、Namespace:

名称空间用来隔离资源

kubectl create ns hello
kubectl delete ns hello
kubectl get ns
kubectl apply -f hello.yaml
kubectl delete -f hello.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: hello

3、pod:

运行中的一组容器,Pod是kubernetes中应用的最小单位.

kubectl get pod  #查看默认名称空间的pod
kubectl get pod -A #查看所有pod
kubectl get pod -n kube-system #查看namespace下的pod

# 运行pod
kubectl run mynginx --image=nginx
# 描述pod
kubectl describe pod mynginx
#Events:
#  Type    Reason     Age    From                         Message
#  ----    ------     ----   ----                         -------
#  Normal  Scheduled  4m40s  default-scheduler            Successfully assigned default/mynginx to kubadmin-k8s-node1
#  Normal  Pulling    4m28s  kubelet, kubadmin-k8s-node1  Pulling image "nginx"
#  Normal  Pulled     4m11s  kubelet, kubadmin-k8s-node1  Successfully pulled image "nginx"
#  Normal  Created    4m11s  kubelet, kubadmin-k8s-node1  Created container mynginx
# Normal  Started    4m10s  kubelet, kubadmin-k8s-node1  Started container mynginx

# 查看pod拉起的容器
docker ps | grep mynginx
# 删除pod
kubectl delete pod mynginx -n default(namespace)
# 查看日志
kubectl logs mynginx
kubectl logs -f mynginx

# 每个Pod - k8s都会分配一个ip
kubectl get pod -owide
# 使用Pod的ip+pod里面运行容器的端口
curl 10.244.2.10:80

# 进入pod命令
kubectl exec -it mynginx -- /bin/bash

# 集群中的任意一个机器以及任意的应用都能通过Pod分配的ip来访问这个Pod

在这里插入图片描述

yaml方式创建

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: mynginx
  name: mynginx
spec:
  containers:
  - image: nginx
    name: mynginx

创建多容器pod

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: myapp
  name: myapp
spec:
  containers:
  - image: nginx
    name: nginx
  - image: tomcat:8.5.68
    name: tomcat

4、Deployment:

控制Pod,使Pod拥有多副本,自愈,扩缩容等能力

# 清除所有Pod,比较下面两个命令有何不同效果?
kubectl run mynginx --image=nginx
# 自愈能力,机器宕机后可以重新拉起
kubectl create deployment mytomcat --image=tomcat:8.5.68

kubectl get deployment
# 删除deployment
kubectl delete deployment my-dep-01

4.1 多副本

kubectl create deployment my-dep --image=nginx --replicas=3

kubectl version

使用yaml创建

kubectl apply -f deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: my-dep
  name: my-dep
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-dep
  template:
    metadata:
      labels:
        app: my-dep
    spec:
      containers:
      - image: nginx
        name: nginx

4.2 扩缩容

kubectl scale --replicas=5 deployment/my-dep
kubectl edit deployment/my-dep

#修改 replicas

4.3 自愈&故障转移

● 停机 ● 删除Pod ● 容器崩溃

演示自愈能力

kubectl get pods -owide
#NAME                      READY   STATUS    RESTARTS   AGE    IP            NODE                 NOMINATED NODE   READINESS GATES
#my-dep-548d78dc5c-2phxq   1/1     Running   0          19m    10.244.1.16   kubadmin-k8s-node1   <none>           <none>
#my-dep-548d78dc5c-zzmp7   1/1     Running   0          24m    10.244.1.15   kubadmin-k8s-node1   <none>           <none>

# 在node1节点上查找my-dep-548d78dc5c-2phxq启动的容器
# node1 节点执行
docker ps | grep my-dep-548d78dc5c-2phxq
#79bb042f2ede        nginx                                               "/docker-entrypoint.…"   22 minutes ago      Up 22 minutes                           k8s_nginx_my-dep-548d78dc5c-2phxq_default_c895f3e6-16a0-4375-a00f-b0b6102aa428_0
#f0589e51aaab        registry.aliyuncs.com/google_containers/pause:3.2   "/pause"                 22 minutes ago      Up 22 minutes                           k8s_POD_my-dep-548d78dc5c-2phxq_default_c895f3e6-16a0-4375-a00f-b0b6102aa428_0

# 停止容器
docker stop 79bb042f2ede

# 重新查看pod状态
kubectl get pods -owide
#NAME                      READY   STATUS    RESTARTS   AGE    IP            NODE                 NOMINATED NODE   READINESS GATES
#my-dep-548d78dc5c-2phxq   1/1     Running   1          27m    10.244.1.16   kubadmin-k8s-node1   <none>           <none>
#my-dep-548d78dc5c-zzmp7   1/1     Running   0          32m    10.244.1.15   kubadmin-k8s-node1   <none>           <none>
# pod已重启

kubectl get pod -w # 动态监控pod停启状态,是k8s命令

4.4 滚动更新

# 已ymal方式查看deployme
kubectl get deployment my-dep -oyaml

# 滚动更新
kubectl set image deployment/my-dep nginx=nginx:1.16.1 --record

4.5 版本回退

#历史记录
kubectl rollout history deployment/my-dep
#[root@kubadmin-k8s-master ~]# kubectl rollout history deployment my-dep
#deployment.apps/my-dep 
#REVISION  CHANGE-CAUSE
#1         <none>
#2         kubectl set image deployment/my-dep nginx=nginx:1.16.1 --record=true

#查看某个历史详情
kubectl rollout history deployment/my-dep --revision=2

#回滚(回到上次)
kubectl rollout undo deployment/my-dep

#回滚(回到指定版本)
kubectl rollout undo deployment/my-dep --to-revision=2

更多: 除了Deployment,k8s还有 StatefulSet 、DaemonSet 、Job 等 类型资源。我们都称为 工作负载。 有状态应用使用 StatefulSet 部署,无状态应用使用 Deployment 部署 https://kubernetes.io/zh/docs/concepts/workloads/controllers/ 在这里插入图片描述

5 Service

将一组 Pods 公开为网络服务的抽象方法。

5.1 ClusterIP方式

#暴露Deploy
kubectl expose deployment my-dep --port=8000 --target-port=80
# 该命令问clusterIp 模式的service,等同于如下命令
kubecet expose deployment my-dep --port=8000 --target-port=80 --type=ClusterIP
# 查看service
kubectl get service
#NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
#kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP    8h
#my-dep       ClusterIP   10.96.163.204   <none>        8000/TCP   8s
# service的这个ip也只在集群内有效
#查看pod标签
kubectl get pod  --show-labels
#NAME                      READY   STATUS    RESTARTS   AGE   LABELS
#my-dep-5b7868d854-9wxz4   1/1     Running   0          11m   app=my-dep,pod-template-hash=5b7868d854
#my-dep-5b7868d854-kzf5l   1/1     Running   0          11m   app=my-dep,pod-template-hash=5b7868d854
#my-dep-5b7868d854-rftj2   1/1     Running   0          11m   app=my-dep,pod-template-hash=5b7868d854
#使用标签检索Pod

#生成service之后,可以通过serviceip:port方式(集群内服务器或pod内部)或者使用域名:port(只能在pod内)的方式进行访问,其中域名的生成规则为service名称.名称空间.svc,如my-dep.default.svc
# 访问方式
curl 10.96.163.204:8000
curl my-dep.default.svc:8000 #只能在pod内
# 使用标签检索Pod
kubectl get pod -l app=my-dep
#NAME                      READY   STATUS    RESTARTS   AGE
#my-dep-5b7868d854-9wxz4   1/1     Running   0          31m
#my-dep-5b7868d854-kzf5l   1/1     Running   0          31m
#my-dep-5b7868d854-rftj2   1/1     Running   0          31m

生成service之后,可以通过serviceip:port方式(集群内服务器或pod内部)或者使用域名:port(只能在pod内)的方式进行访问,其中域名的生成规则为service名称.名称空间.svc,如my-dep.default.svc
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值