• K8s--02 K8S部署


    K8s部署

    一、实验环境准备

    k8s实验环境准备:
    
    配置信息:
    主机名	  IP地址	       推荐配置     勉强配置
    node1     10.0.0.11    1C4G40G     1C2G		
    node2     10.0.0.12    1C2G40G     1C1G
    node3     10.0.0.13    1C2G40G     1C1G
    
    初始化操作:
    干净环境
    关闭防火墙
    关闭SELinux
    配置时间同步
    配置主机名
    配置host解析
    更新好阿里源 
    确保网络通畅
    
    软件准备:
    harbor离线包 
    

    二、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通讯。
    

    三、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  
    

    四、安装指定版本的docker

    #安装部署docker
    1.设置国内YUM源
    [root@node1 ~]# cd /etc/yum.repos.d/
    [root@node1 ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    #查看源
    [root@node1 yum.repos.d]# ll
    总用量 12
    -rw-r--r-- 1 root root 1657 2月  25 12:10 CentOS-Base.repo
    -rw-r--r-- 1 root root 2640 2月  24 17:15 docker-ce.repo
    -rw-r--r-- 1 root root  954 2月  25 12:10 epel.repo
    
    2.安装指定的docker版本
    [root@node1 ~]# yum -y install docker-ce-18.09.7-3.el7 docker-ce-cli-18.09.7
    
    3.设置docker使用阿里云加速
    [root@node1 ~]# mkdir /etc/docker
    [root@node1 ~]# cat > /etc/docker/daemon.json <<EOF
        {
          "registry-mirrors": ["https://ig2l319y.mirror.aliyuncs.com"],
          "exec-opts": ["native.cgroupdriver=systemd"]
        }
    EOF
    
    4.启动后台进程
    [root@node1 ~]# systemctl enable docker && systemctl start docker
    
    5.查看docker版本
    [root@node1 ~]# docker -v
    Docker version 18.09.7, build 2d0083d
    
    涉及到的命令
    
    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节点
    kubeadm token create --print-join-command	#打印出node节点加入master节点的命令
    kubeadm join 10.0.0.11:6443 --token uqf018.mia8v3i1zcai19sj     --discovery-token-ca-cert-hash sha256:e7d36e1fb53e59b12f0193f4733edb465d924321bcfc055f801cf1ea59d90aae  #node节点加入master的命令
    

    五、安装部署kubeadm和kubelet

    #部署kubeadm和kubelet
    
    注意!所有机器都需要操作!!!
    
    1.设置k8s国内yum仓库
    [root@node1 ~]# 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=1
    repo_gpgcheck=1
    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
    [root@node1 ~]# yum install -y kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2 ipvsadm
    #注意:如果安装报错,可能网速不好,再执行一遍
    
    3.设置k8s禁止使用swap
    [root@node1 ~]# cat > /etc/sysconfig/kubelet<<EOF
    KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
    KUBELET_EXTRA_ARGS="--fail-swap-on=false"
    EOF
    
    #如果有swap,要注释掉
    [root@node1 yum.repos.d]# vim /etc/fstab
    
    4.设置内核参数
    [root@node1 ~]# 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
    [root@node1 ~]# sysctl --system
    
    5.设置kubelet开机启动
    [root@node1 ~]# systemctl enable kubelet && systemctl start kubelet
    
    6.加载IPVS模块
    [root@node1 ~]# cat >/etc/sysconfig/modules/ipvs.modules<<EOF
    #!/bin/bash
    modprobe -- ip_vs
    modprobe -- ip_vs_rr
    modprobe -- ip_vs_wrr
    modprobe -- ip_vs_sh
    modprobe -- nf_conntrack_ipv4
    EOF
    [root@node1 ~]# chmod +x /etc/sysconfig/modules/ipvs.modules
    [root@node1 ~]# source /etc/sysconfig/modules/ipvs.modules
    [root@node1 ~]#  lsmod | grep -e ip_vs -e nf_conntrack_ipv
    ip_vs_sh               12688  0 
    ip_vs_wrr              12697  0 
    ip_vs_rr               12600  4 
    ip_vs                 145497  10 ip_vs_rr,ip_vs_sh,ip_vs_wrr
    nf_conntrack_ipv4      15053  7 
    nf_defrag_ipv4         12729  1 nf_conntrack_ipv4
    nf_conntrack          133095  7 ip_vs,nf_nat,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_netlink,nf_conntrack_ipv4
    libcrc32c              12644  4 xfs,ip_vs,nf_nat,nf_conntrack
    

    六、初始化Master节点

    初始化集群部署Master
    0.安装规划
    节点规划
    node1  master节点  API Server controlle  scheduler kube-proxy etcd
    node2
    node3
    
    IP规划
    POD IP.      10.2.0.0 
    Cluster IP.  10.1.0.0 
    Node IP.     10.0.0.0
    
    
    1.初始化命令
     [root@node1 ~]# wget https://v1-16.docs.kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/
    
    #注意!只在node1节点运行!!!
    [root@node1 ~]# kubeadm init 
    --apiserver-advertise-address=10.0.0.11 
    --image-repository registry.aliyuncs.com/google_containers 
    --kubernetes-version v1.16.2 
    --service-cidr=10.1.0.0/16 
    --pod-network-cidr=10.2.0.0/16 
    --service-dns-domain=cluster.local 
    --ignore-preflight-errors=Swap 
    --ignore-preflight-errors=NumCPU
    
    执行完成后会有输出,这是node节点加入k8s集群的命令
    ===============================================
      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
      ...
      
    kubeadm join 10.0.0.11:6443 --token lb2q8w.knrkzvwg9vp8blqi 
        --discovery-token-ca-cert-hash sha256:b094543a3bbf748301b57b04d4722a246413646cbd698e427cbfdc4879f9bcd8 
    
     
    ===============================================
    
    2.为kubectl准备kubeconfig(初始化返回结果有显示)
    [root@node1 ~]# mkdir -p $HOME/.kube
    [root@node1 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    [root@node1 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    3.获取node节点信息
     [root@node1 ~]# kubectl get nodes
    NAME    STATUS     ROLES    AGE   VERSION
    node1   NotReady   master   15m   v1.16.
    
    4.支持命令补全
    [root@node1 ~]# yum install bash-completion -y
    [root@node1 ~]# source /usr/share/bash-completion/bash_completion
    [root@node1 ~]# source <(kubectl completion bash)
    [root@node1 ~]# kubectl completion bash >/etc/bash_completion.d/kubectl
    
    5.设置kube-proxy使用ipvs模式
    #执行命令,然后将mode: ""修改为mode: "ipvs"然后保存退出
    [root@node1 ~]# kubectl edit cm kube-proxy -n kube-system
    configmap/kube-proxy edited
    
    
    #重启kube-proxy
    [root@node1 ~]# kubectl get pod -n kube-system |grep kube-proxy |awk '{system("kubectl delete pod "$1" -n kube-system")}'
    
    #查看pod信息
    [root@node1 ~]# kubectl get -n kube-system pod|grep "kube-proxy" 
    kube-proxy-28rlx                1/1     Running   0          11s
    
    
    #检查日志,如果出现IPVS rr就表示成功(注意:最后要tab出来)
    [root@node1 ~]# kubectl -n kube-system logs -f kube-proxy-7xxxx
    I0225 08:03:57.736191       1 node.go:135] Successfully retrieved node IP: 10.0.0.11
    I0225 08:03:57.736249       1 server_others.go:176] Using ipvs Proxier.
    W0225 08:03:57.736841       1 proxier.go:420] IPVS scheduler not specified, use rr by default
    
    #检查IPVS规则
    [root@node1 ~]# ipvsadm -Ln
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  10.1.0.1:443 rr
      -> 10.0.0.11:6443               Masq    1      0          0         
    TCP  10.1.0.10:53 rr
    TCP  10.1.0.10:9153 rr
    UDP  10.1.0.10:53 rr
    

    七、部署网络插件flannel

    部署网络插件
    1.部署Flannel网络插件
    git clone --depth 1 https://github.com/coreos/flannel.git
    
    #或者直接上传软件包
    [root@node1 ~]# ll
    总用量 7340
    -rw-------. 1 root root    1480 2月  24 22:23 anaconda-ks.cfg
    -rw-r--r--  1 root root 7505555 2月  25 16:29 flannel-master.zip
    -rw-r--r--. 1 root root     474 2月  24 22:28 host_ip.sh
    [root@node1 ~]# unzip flannel-master.zip 
    2.修改资源配置清单
    [root@node1 ~]# ll
    总用量 7344
    -rw-------.  1 root root    1480 2月  24 22:23 anaconda-ks.cfg
    drwxr-xr-x  13 root root    4096 10月 31 23:22 flannel-master
    -rw-r--r--   1 root root 7505555 2月  25 16:29 flannel-master.zip
    -rw-r--r--.  1 root root     474 2月  24 22:28 host_ip.sh
    [root@node1 ~]# cd flannel-master/Documentation/
    #修改之前先备份
    [root@node1 Documentation]# cp kube-flannel.yml  /opt
    [root@node1 Documentation]# vim kube-flannel.yml 
    [root@node1 Documentation]# egrep -n "10.2.0.0|mirror|eth0" kube-flannel.yml
    128:      "Network": "10.2.0.0/16",
    172:        image: quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64
    186:        image: quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64
    192:        - --iface=eth0
    
    
    3.应用资源配置清单
    kubectl create -f kube-flannel.yml
    
    4.检查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
    
    #注意:如果报错:
    在目录里操作:
    1: kubectl delete -f kube-flannel.yml
    2: cp kube-flannel.yml /opt
    3: rm -rf kube-flannel.yml
    4: 然后把包拖进来,修改
    5: kubectl create -f kube-flannel.yml
    6:kubectl -n kube-system get pod
    

    八、kubeadm部署Node节点

    部署Node节点
    
    1.在master节点上输出增加节点的命令(这条命令结果和初始化执行结果保存的一样)
    [root@node1 Documentation]# kubeadm token create --print-join-command
    kubeadm join 10.0.0.11:6443 --token 6a81dl.1h4evnpbmu1phdu6     --discovery-token-ca-cert-hash sha256:b094543a3bbf748301b57b04d4722a246413646cbd698e427cbfdc4879f9bcd8 
    
    
    2.在node2和node3节点执行加入集群的命令 每个人的token不一样
    [root@node2 yum.repos.d]# kubeadm join 10.0.0.11:6443 --token 6a81dl.1h4evnpbmu1phdu6     --discovery-token-ca-cert-hash sha256:b094543a3bbf748301b57b04d4722a246413646cbd698e427cbfdc4879f9bcd8 
    [root@node3 ~]# kubeadm join 10.0.0.11:6443 --token 6a81dl.1h4evnpbmu1phdu6     --discovery-token-ca-cert-hash sha256:b094543a3bbf748301b57b04d4722a246413646cbd698e427cbfdc4879f9bcd8 
    
    3.在node1节点上查看状态
    [root@node1 Documentation]# kubectl get nodes
    NAME    STATUS   ROLES    AGE   VERSION
    node1   Ready    master   20m   v1.16.2
    node2   Ready    <none>   66s   v1.16.2
    node3   Ready    <none>   61s   v1.16.2
    
    
    4.给节点打标签
    [root@node1 Documentation]# kubectl label nodes node2 node-role.kubernetes.io/node=
    node/node2 labeled
    [root@node1 Documentation]# kubectl label nodes node3 node-role.kubernetes.io/node=
    node/node3 labeled
    
    
    5.再次查看节点状态
    [root@node1 ~]# kubectl get nodes
    NAME    STATUS   ROLES    AGE    VERSION
    node1   Ready    master   171m   v1.16.2
    node2   Ready    node     27m    v1.16.2
    node3   Ready    node     27m    v1.16.2
    
    
    
  • 相关阅读:
    vue 简易弹框
    js瀑布流触底动态加载数据
    ios解决大转盘层级以及闪烁bug
    dom 相同父节点查找
    为什么 EXISTS(NOT EXIST) 与 JOIN(LEFT JOIN) 的性能会比 IN(NOT IN) 好
    exists(关联表)与left join 的效率比较
    【SpringCloud】Re04 Gateway
    【SpringCloud】Re03 Feign
    【SpringCloud】 Re02 Nacos
    【SpringCloud】 Re01
  • 原文地址:https://www.cnblogs.com/gongjingyun123--/p/12543075.html
Copyright © 2020-2023  润新知