每天5分钟玩转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
    port:
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值