美文网首页devops
Kubernetes(一)

Kubernetes(一)

作者: 吃可爱长大鸭 | 来源:发表于2020-02-25 17:23 被阅读0次

    简介 k8s系统架构

    从系统架构来看,k8s分为2个节点
    Master  控制节点  指挥官
    Node    工作节点  干活的
    
    1.Master节点组成
    API Server :提供k8s API接口
    主要处理Rest操作以及更新Etcd中的对象
    是所有资源增删改查的唯一入口。
    
    Scheduler:资源调度器
    根据etcd里的节点资源状态决定将Pod绑定到哪个Node上
    
    Controller Manager
    负责保障pod的健康存在
    资源对象的自动化控制中心,Kubernetes集群有很多控制器。
    
    Etcd
    这个是Kubernetes集群的数据库
    所有持久化的状态信息存储在Etcd中
    
    
    2.Node节点的组成
    Docker Engine
    负责节点容器的管理工作,最终创建出来的是一个Docker容器。
    
    kubelet 
    安装在Node上的代理服务,用来管理Pods以及容器/镜像/Volume等,实现对集群对节点的管理。
    
    kube-proxy
    安装在Node上的网络代理服务,提供网络代理以及负载均衡,实现与Service通讯。
    
    
    第2章 k8s逻辑架构
    从逻辑架构上看,k8s分为
    Pod 
    Controller 
    Service   
    
    1.POD 
      POD是k8s的最小单位
      POD的IP地址是随机的,删除POD会改变IP
      POD都有一个根容器
      一个POD内可以由一个或多个容器组成
      一个POD内的容器共享根容器的网络命名空间
      一个POD的内的网络地址由根容器提供
      
    2.Controller
      用来管理POD
      控制器的种类有很多
      - RC Replication Controller  控制POD有多个副本
      - RS ReplicaSet              RC控制的升级版
      - Deployment                 推荐使用,功能更强大,包含了RS控制器
      - DaemonSet                  保证所有的Node上有且只有一个Pod在运行
      - StatefulSet            有状态的应用,为Pod提供唯一的标识,它可以保证部署和scale的顺序
    
    3.Service
      NodeIP  
      CluterIP
      POD IP  
    

    第一章 k8s实验环境准备:

    配置信息:

    主机名 IP地址 推荐配置 勉强配置
    master 10.0.0.11 1C4G40G 1C2G
    node1 10.0.0.12 1C2G40G 1C1G
    node2 10.0.0.13 1C2G40G 1C1G

    初始化操作:

    干净环境
    关闭防火墙
    关闭SELinux
    配置时间同步
    配置主机名
    配置host解析
    更新好阿里源 
    确保网络通畅
    

    第二章 安装部署docker

    1.安装docker yum源
    wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
    
    2.安装指定的docker版本
    yum -y install docker-ce-18.09.7-3.el7 docker-ce-cli-18.09.7
    
    3.设置docker使用阿里云加速
    tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://ig2l319y.mirror.aliyuncs.com"]
    }
    EOF
    
    4.启动后台进程
    systemctl start docker && systemctl enable docker  
    
    5.查看docker版本
    docker -v
    

    第三章 部署kubeadm和kubelet

    注意!所有机器都需要操作!!!
    注意!所有机器都需要操作!!!
    注意!所有机器都需要操作!!!
    
    1.添加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
    
    
    2.安装kubeadm,kubelet和kubectl
    yum install -y kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2 ipvsadm
    
    3.设置k8s禁止使用swap
    cat > /etc/sysconfig/kubelet<<EOF
    KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
    KUBELET_EXTRA_ARGS="--fail-swap-on=false"
    EOF
    
    4.设置内核参数
    cat >  /etc/sysctl.d/k8s.conf <<EOF
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    EOF
    sysctl --system
    
    5.设置kubelet开机启动
    systemctl enable kubelet && systemctl start kubelet
    

    第四章 初始化集群部署Master

    1.初始化
    kubeadm init \
    --image-repository registry.aliyuncs.com/google_containers \
    --kubernetes-version v1.16.0 \
    --service-cidr=10.1.0.0/16 \
    --pod-network-cidr=10.244.0.0/16
    
    2.为kubectl准备kubeconfig
      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    执行完成后会有输出,这是node节点加入k8s集群的命令
    ===============================================
    
    kubeadm join 10.0.0.11:6443 --token 2an0sn.kykpta54fw6uftgq \
        --discovery-token-ca-cert-hash sha256:80cf180e844f6a7b6ae3bd3ba994d7727db1e78d25220344c57b7bb667b70f9e
     
    ===============================================
    
    4.支持命令补全
    yum install bash-completion -y
    source /usr/share/bash-completion/bash_completion
    source <(kubectl completion bash)
    kubectl completion bash >/etc/bash_completion.d/kubectl
    
    

    第五章 部署网络插件

    # master操作
    1.部署Flannel网络插件
    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    
    # 检查flannel进程
    ps -ef|grep flannel
    
    2.检查pod运行状态,等一会应该全是running
    [root@node1 ~]# kubectl -n kube-system get pod
    NAME                            READY   STATUS    RESTARTS   AGE
    coredns-58cc8c89f4-bzlkw        1/1     Running   0          77m
    coredns-58cc8c89f4-sgs44        1/1     Running   0          77m
    etcd-node1                      1/1     Running   0          76m
    kube-apiserver-node1            1/1     Running   0          76m
    kube-controller-manager-node1   1/1     Running   0          76m
    kube-flannel-ds-amd64-cc5g6     1/1     Running   0          3m10s
    kube-proxy-7cdbn                1/1     Running   0          23m
    kube-scheduler-node1            1/1     Running   0          76m
    

    涉及到的命令

    ipvsadm -Ln #查看ipvs规则
    kubectl get pod #查看pod信息
    kubectl get pod -o wide #查看pod的详细信息 ip labels
    kubectl get pod -n kube-system -o wide #指定查看某个命名空间的pod的详细信息 
    kubectl get nodes #查看节点信息
    kubectl get nodes -o wide #查看节点详细信息
    kubectl -n kube-system edit cm kube-proxy  #编辑某个资源的配置文件
    kubectl -n kube-system logs -f kube-proxy-7cdbn #查看指定命名空间里的指定pod的日志
    kubectl create -f kube-flannel.yml  #根据资源配置清单创建相应的资源
    kubectl delete -f kube-flannel.yml    #删除资源配置清单相应的资源
    kubeadm reset  #重置kubeadm节点
    
    # 命令行运行pod资源
    kubectl run nginx --image=nginx:1.16-alpine --port=80 
    
    # 查看deployment列表
    kubectl get deployment
    
    # 打通svc
    kubectl expose deployment nginx-deploy --name=nginx --port=80 --target-port=80 --protocol=TCP
    kubectl expose deployment  nginx-deploy --name=nginx 
    
    # 升级
    kubectl set image deployment nginx-deploy  nginx=nginx:1.17.0
    
    #回滚
    kubectl rollout undo deployment nginx-deploy
    
    # 修改副本数
    kubectl scale --replicas=2 deployment nginx-deploy 
    
    #修改资源
    kubectl edit svc nginx
    
    # 查看pod详细信息
    kubectl describe pods nginx-deploy-6bb866c9b9-jlzsk
    
    # 查看deployment 详细信息
    kubectl describe deployments.apps nginx-deploy
    
    
    # 删除pod
    kubectl delete po nginx-deployment
    
    # 删除deployment
    kubectl delete deployment nginx
    

    相关文章

      网友评论

        本文标题:Kubernetes(一)

        本文链接:https://www.haomeiwen.com/subject/nluxchtx.html