每天5分钟玩转K8S (看书笔记)

本文档详细介绍了如何部署Kubernetes(K8S)集群,包括安装Docker、kubeadm、kubelet和kubectl,使用kubeadm创建集群,配置pod网络,添加node节点。此外,还探讨了如何运行应用程序,如Deployment、DaemonSet和Job,以及通过Service进行通信。健康检查、数据管理和包管理工具Helm也有所涉及,强调了在K8S中使用Service、Volume、Secret和ConfigMap的方法。最后,文章讨论了K8S的网络模型,包括不同组件之间的通信方式和多种网络方案。

第3章 部署k8s集群

安装docker

安装kubeadm,kubelet,kubectl

使用kubeadm创建集群

1.kubeadm初始化创建master

kubeadm init --apiserver-advertise-address 192.168.56.105 --pod-network-cidr=10.244.0.0/16

–apiserver-advertise-address 指明了使用master与其他节点的通信ip

–pod-network-cidr 指定pod网络的范围。

2.配置kubectl

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

kubectl 需要通过这个config文件访问K8s的apiserver,来获取集群的信息。

KUBECONFIG=xxx.conf kubectl get pods

所以使用不同的配置文件,就可以访问不同的集群

3.安装pod网络

没有pod网络,集群中的pod就不能相互通信。K8s有多种网络

flannel
创建flannel网络

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Cannal

4.添加node节点

在node节点上执行

kubeadm join --token xxxx 192.168.56.105:6443

token是master节点 kubeadm init时创建。可以通过kubeadm token list获取。

总结

k8s的组件都是由kubeadm控制,从官方库下载的镜像,然后运行的容器。他们都是k8s中的pod,属于集群中的一部分。

kubelet是唯一没有以容器形式运行的k8s组件。以systemd服务运行。

第5章 运行应用

Deployment

k8s支持两种创建资源的方式

  1. 使用命令创建
kubectl run nginx-deployment --image=nginx:1.9.1 --replicas2
  1. 使用配置文件
apiVersion: apps/v1         #apiserver版本,每个版本内功能可能不相同
kind: Deployment            #资源类型
metadata:                   #deployment元数据,name是必要元数据项
  name: bxy-local-nginx
  namespace: kube-system    #命名空间
spec:                       #deployment资源清单
  replicas: 1               #副本数量
  selector:                 #(必须项)保证和pod标签一致即可
    matchLabels:
      k8s-app: bxy-local-nginx-label
  template:                 #pod模板
    metadata:               #pod元数据,至少有一个label
      labels:               #pod标签(必需项)
        k8s-app: bxy-local-nginx-label
    spec:                   #pod规格
      imagePullSecrets:
      - name: regcred
      containers:           #容器描述,name和image是必须
      - name: bxy-local-nginx
        image: mirrors.tencent.com/tcnp_tkestack/busybox:latest
        imagePullPolicy: IfNotPresent  #如果本地没有则拉取镜像库
        volumeMounts:       #挂载卷配置
        - mountPath: /echo_dir      #挂载容器目录
          name: bxy-local-pv-volume     #绑定的pv名称,和volumes.name一致
        args:
        - /bin/sh
        - -c
        - echo "hello world" > /echo_dir/hello; sleep 3000
      volumes:              #pv描述
      - name: bxy-local-pv-volume      #pv名称 
        persistentVolumeClaim:
          claimName: bxy-local-pvc-volume   #绑定的pvc名称
kubectl apply -f nginx.yml      应用nginx.yml配置文件
kubectl delete -f nginx.yml  或者 kubectl delete deployment_name 删除deployment

kubectl describe pod -n namespace 查看pod的详细情况

  1. 将master变成node使用。
kubectl tain node k8s-master node-role.kubernetes.io/master-    将master配置成node

kubectl tain node k8s-master node-role.kubernetes.io/master="":NoSchedule   恢复master only
  1. 使用label控制pod位置
  • 通过label将pod部署到指定node
    • 1.给node添加标签
    kubectl label node k8s-node1 disktype=ssd       添加标签
    kubectl label node k8s-node1 disktype-          删除标签
    
    • 2.修改deployment配置
    spec:
        containers:
        - name:nginx
          image: nginx:1.0.9
        nodeSelector:
          disktype: ssd
    
  • 直接指定部署的node
    spec:
        nodename: k8s-node1

nodename就是主机名,修改主机名

kubectl --hostname-override=node1

DaemonSet

DaemonSet的不同之处,每个node只能运行一个副本,一般用于监控daemon,日志收集daemon,存储daemon.

Job

容器分为服务型和工作型,服务型需要一直运行,工作型一次性任务,完成后容器退出。

第6章 通过service访问pod

pod内的容器共享同一个ip和端口空间,他们之间可以使用localhost通信。类似于同一个机器上的不同进程。

每一个pod都会分配一个IP,这个ip只能被集群内的容器和节点访问。
Pod可能会频繁地销毁和创建,也就是说Pod的IP不是固定的。为了解决这个问题,Service提供了访问Pod的抽象层。无论后端的Pod如何变化,Service都作为稳定的前端对外提供服务。同时,Service还提供了高可用和负载均衡功能,Service负责将请求转发给正确的Pod。

创建service

apiVersion: apps/v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort
  selector:
    app: nginx-test  #pod标签
  ports:
  - protocol: TCP
    
每天花五分钟学习并掌握使用Kubernetes(简称K8s)的PDF资料是一种高效的学习方法。Kubernetes是一种开源的容器编排引擎,被广泛应用于容器化应用的部署和管理。通过每天花五分钟阅读和实践相关的资料,你将能够快速了解Kubernetes的基本概念和使用方法。 首先,你可以通过PDF资料了解Kubernetes的基本概念和架构。了解Kubernetes的核心组件、节点、Pod、服务等基本概念,可以帮助你理解Kubernetes的工作原理和设计思想。此外,你还可以了解到Kubernetes的优势和适用场景,以及与其他容器编排引擎的对比。 其次,你可以通过PDF资料学习Kubernetes的命令和API。Kubernetes提供了一组丰富的命令和API,用于管理和配置集群、部署应用、扩缩容等操作。通过学习这些命令和API,你将能够熟练地使用Kubernetes来管理和操作你的应用。 另外,PDF资料还通常提供了一些实际的示例和最佳实践,你可以通过阅读这些示例来学习如何使用Kubernetes来解决实际问题。例如,如何部署一个容器化的应用、如何进行服务发现和负载均衡、如何进行应用的水平扩展等等。 在每天分钟的学习中,你可以选择特定的主题进行学习,例如一天学习Kubernetes的核心概念,下一天学习Kubernetes的命令和API,再下一天学习Kubernetes的实践示例等等。通过持续地每天学习五分钟,你将逐渐掌握Kubernetes的知识和技能,为以后的工作和学习打下坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值