k8s 学习进阶之路

kubernetes小白进阶之路

报了个课程,记录一下学习过程,文档可分享。

第一二章

章节练习:

1.1 使用kubeadm搭建一个K8s集群 。

集群搭建链接: https://blog.csdn.net/MrFDd.

查看集群状态

 kubectl get pods -n kube-system

在这里插入图片描述
##READY 1/1 STATUS Runing 就说明集群正常了。

1.2 新建一个命名空间,创建一个deployment并暴露Service 。

• 命名空间:aliang-cka
• 名称:web
• 镜像:nginx

kubectl create namespace aliang-cka
kubectl create deployment web --image=nginx -n aliang-cka
kubectl expose deployment web --port=80 --target-port=80 --type=NodePort -n aliang-cka
(service不指定--name=web默认和deployment名字一样)
kubectl expose deployment web2 --port=80 --target-port=80 --type=NodePort --name=web2 -n aliang-cka
kubectl get service

在这里插入图片描述
在这里插入图片描述

1.3 列出命名空间下指定标签pod 。

• 命名空间名称:kube-system
• 标签:k8s-app=kube-dns

kubectl get pod -n kube-system -l k8s-app=kube-dns

在这里插入图片描述

第三章

3.1 查看pod日志,并将日志中Error的行记录到指定文件 。

• pod名称:web
• 文件:/opt/web

kubectl get pods -n aliang-cka
kubectl logs web-674477549d-7vrj9 -n aliang-cka |grep error > /opt/error-erb.txt

在这里插入图片描述
在这里插入图片描述

3.2 查看指定标签使用cpu最高的pod,并记录到到指定文件 。

• 标签:app=web
• 文件:/opt/cpu

kubectl top pods -l app=web --use-protocol-buffers |awk -F ' ' 'NR==2{print $2}' > /opt/cpu
kubectl top pod -n aliang-cka -l app=web --sort-by="cpu"|sed -n "2p" > /opt/cpu

在这里插入图片描述

第四章 应用生命周期管理deployment(上)

4.1 创建一个deployment 副本数 2,然后滚动更新镜像版本,并记录这个更新记录,最后再回滚到上一个版本。

• 名称:nginx
• 镜像版本:1.16
• 更新镜像版本:1.17

应用升级(更新镜像三种方式,自动触发滚动升级)

kubectl apply -f xxx.yaml 
kubectl set image deployment/web nginx=nginx:1.17
kubectl edit deployment/web #使用系统编辑器打开

回滚

kubectl rollout history deployment/web # 查看历史发布版本
kubectl rollout undo deployment/web # 回滚上一个版本
kubectl rollout undo deployment/web --to-revision=2 # 回滚历史指定版本

4.2 给web deployment扩容副本数为3 。

请参考4.1。

4.3 把deployment输出json文件,再删除创建的deployment 。

kubectl get deployment web -o json > my-deploy.json
kubectl delete deploy/web
kubectl delete svc/web

4.4 生成一个deployment yaml文件保存到/opt/deploy.yaml 。

• 名称:web
• 标签:app_env_stage=dev

kubectl create deploymentapp_env_stage=dev --image=nginx:1.16 -o yaml --dry-run=client >/opt/deploy.yaml

第四章 应用生命周期管理pod(下)

4.5 创建一个pod,其中运行着nginx、redis、memcached、consul 4个容器 。

vim pod1

apiVersion: v1
kind: Pod
metadata:
  name: pod2
spec:
  containers:
  - name: container1
    image: nginx
  - name: container2
    image: redis
  - name: container3
    image: memcached
  - name: container4
    image: consul

在这里插入图片描述

4.6 在节点上配置kubelet托管启动一个pod (起一个静态pod)。

• 节点:k8s-node1
• pod名称:web
• 镜像:nginx

在官网复制一个deployment,修改添加镜像
vim /etc/kubernetes/manifests

apiVersion: v1
kind: Pod
metadata:
  labels:
    app: nginx
  name: web
spec:
  containers:
  - image: nginx
    name: ngin  
Kubelet apply -f IVcontainer.yaml

4.7 检查容器中文件是否创建,如果没有被检测到pod重启 。

• 文件路径:/tmp/test.sock

apiVersion: v1
kind: Pod
metadata:
  name: healthcheck
spec:
  containers:
  - name: healthcheck
    image: nginx
    livenessProbe: #存活检查,重启容器
      exec:
        command:
        - ls
        - /tmp/test.sock
      initialDelaySeconds: 8 #启动容器后多少秒健康检查
      periodSeconds: 5  #以后每间隔多少秒检查一次
kubectl apply -f healthcheck.yaml

在这里插入图片描述

图片
当初创建、tpm/test.sock.sock,不在重启。

第五章:K8s调度-Pod调度控制篇

5.1 创建一个pod,分配到指定标签node上 。

• pod名称:web 。
• 镜像:nginx
• node标签:disk=ssd

1,给节点添加标签并验证。

kubectl label nodes k8s-node1 disk=ssd
kubectl get nodes --show-labels

2,创建一个nodeselector.yaml 文件,并验证。

apiVersion: v1
kind: Pod
metadata:
  name: nodeselector
spec:
  nodeSelector:
    disk: "ssd"
  containers:
  - name: nginx
    image: nginx:1.19
kubectl apply -f nodeselector
kubectl get pods -o wide

在这里插入图片描述

5.2 确保在每个节点上运行一个pod 。

• pod名称:nginx
• 镜像:nginx

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      name: filebeat
  template:
    metadata:
      labels:
        name: filebeat
    spec:
      tolerations:
      - effect: NoSchedule
        operator: Exists
      containers:
      - name: log
        image: nginx
       

创建pod分配到每一个节点,并查看节点信息。

kubectl apply -f daemontnginx.yaml
kubectl get pods -o wide

在这里插入图片描述

5.3 查看集群中状态为ready的node数量,并将结果写到指定文件。

kubectl get nodes |grep "\<Ready\>" |wc -l > /tmp/nodeQuantity.txt
cat /tmp/nodeQuantity.txt
kubectl get nodes

在这里插入图片描述

第六章 Kubernetes网络

6.1 给一个pod创建service,并可以通过ClusterIP/NodePort访问。

• 名称:web-service
• pod名称:web
• 容器端口:80

创建一个pod。

vim web-service.yaml
piVersion: v1
kind: Service
metadata:
  name: web
spec:
  type: NodePort # 服务类型
  ports:
  - name: http
    port: 80 # Service端口
    protocol: TCP # 协议
    targetPort: 80 # 容器端口(应用程序监听端口)
  - name: https
    port: 443 # Service端口
    protocol: TCP # 协议
    targetPort: 443 # 容器端口(应用程序监听端口)
    nodePort: 30521
  selector:
    app: web # 指定关联Pod的标签

暴露service。

vim webPod.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: web
  name: web
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web
  strategy: {}
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - image: nginx
        name: nginx

在这里插入图片描述
在这里插入图片描述

6.2 任意名称创建deployment和service,使用busybox容器nslookup解析service。

6.3 列出命名空间下某个service关联的所有pod,并将pod名称写到/opt/pod.txt文件中(使用标签筛选)。

• 命名空间:default
• service名称:web

创建一个pod并暴露service。

kubectl create deployment web --image=nginx 
kubectl expose deployment web --port=80 --target-port=80 

写到/opt/pod.txt文件中。

kubectl get pods -l app=web | awk -F ' ' 'NR=2{print $1}' > /opt/pot.txt

在这里插入图片描述

6.4 使用Ingress将美女示例应用暴露到外部访问。

• 镜像:lizhenliang/java-demo

创建pod并暴露service

kubectl create deployment beauty --image=lizhenliang/java-demo
kubectl expose deployment beauty --port=80 --target-port=8080

ingress暴露应用。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-beauty
  annotations:
    kubernetes.io/ingress.class: "nginx" # 指定ingress控制器
spec:
  rules:
  - host: "beauty.aliangedu.cn"
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: beauty
            port:
              number: 80

第七章 Kubernetes存储

7.1 创建一个secret,并创建2个pod,pod1挂载该secret,路径为/secret,pod2使用环境变量引用该secret,该变量的环境变量名为ABC 。

• secret名称:my-secret
• pod1名称:pod-volume-secret
• pod2名称:pod-env-secret

7.2 创建一个pv,再创建一个pod使用该pv 。

• 容量:5Gi
• 访问模式:ReadWriteOnce

vim pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv-task
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: /ifs/kubernetes
    server: 192.168.30.4
vim web-pvc-task

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-pvc-task
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - name: wwwroot
          mountPath: /usr/share/nginx/html
      volumes:
      - name: wwwroot
        persistentVolumeClaim:
          claimName: my-pv
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc-task
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi

7.3 创建一个pod并挂载数据卷,不可以用持久卷。

• 卷来源:emptyDir、hostPath任意
• 挂载路径:/data

7.4 将pv按照名称、容量排序,并保存到/opt/pv文件。

持续更新

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值