zoukankan      html  css  js  c++  java
  • K8S安装

    什么是K8S

    • kubenetes是一个全新的基于容器技术的分布式架构解决方案,并且是一个一站式的完备的分布式系统开发和支撑平台。
    • Master节点上运行着集群管理相关的一组进程:Kube-apiserver,Kube-controller-manager和 Kube-scheduler,这些进程实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和存储等管理功能。
    • Node节点上运行着kubelet,kube-proxy服务进程,这些进程负责Pod的创建、启动、监控、重启、销毁、以及实现软件模式的负载均衡器。

    为什么使用K8S

    • 新技术的驱动
    • Docker容器化技术已经被很多公司采用,从单机走向集群已成必然,云计算的发展正在加速这一进程
    • 全面拥抱微服务(微服务架构使得每个服务都可以独立开发,升级和扩展,因此系统具备很高的稳定性和快速迭代能力,开发者也可以自由选择开发技术。)
    • K8S提供的服务弹性扩容机制面对突发流量

    概念和术语

    • Master是集群管理的控制节点,基本上所有的命令都发给它,它负责具体的执行过程。
    • Node是K8s中的工作负载节点,每个node都会被master分配一些工作负载。
    • Pod是K8s最小运行单元。
    • Replication Controller (RC)副本控制,声明Pod的副本数量在任意时刻都符合某个预期值。
    • Deployment 在内部使用Replica Set(Replocation Controller的升级)实现部署。
    • Horizontal Pod Autoscaler(HPA) Pod横向自动扩容;指标:CUP,QPS,TPS。
    • StatefulSet 有状态服务。
    • Service 就是我们经常提起的微服务架构中的一个一个微服务。

    安装K8S [kubeadm方式]

    主机 类型 操作系统
    192.168.124.180 Master Centos 7
    192.168.124.181 Node Centos 7
    192.168.124.182 Node Centos 7

    设置主机名

    hostnamectl set-hostname master
    hostnamectl set-hostname node1
    hostnamectl set-hostname node2
    
    # 修改 /etc/hosts
    192.168.124.180 master
    192.168.124.181 node1
    192.168.124.182 node2
    

    关闭防火墙|禁用SELinux|关闭交换分区

    # 禁用主机SELinux,让容器可以读取主机文件系统
    setenforce 0
    # 关闭防火墙
    systemctl disable firewalld
    systemctl stop firewalld
    # #实时动态关闭交换分区
    swapoff -a 
    # 注释 swap 行
    vim /etc/fstab
    

    Yum 国内源

    cd /etc/yum.repos.d  && 
    sudo mv CentOS-Base.repo CentOS-Base.repo.bak && 
    sudo wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && 
    yum clean all && 
    yum makecache
    

    配置k8s资源的下载地址

    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=0
    repo_gpgcheck=0
    gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
            http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    EOF
    

    安装Docker并且替换Docker源

    Docker 安装

    # 换源
    mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
    "registry-mirrors": ["https://registry.docker-cn.com"],
    "exec-opts": ["native.cgroupdriver=systemd"]
    }
    EOF
    
    service docker restart
    

    安装K8S

    yum install kubelet kubeadm kubectl 
    

    下载k8s依赖镜像

    获取依赖的镜像

    kubeadm config images list
    

    阿里云镜像下载k8s依赖组件

    kubeadm config images list |sed -e 's/^/docker pull /g' -e 's#k8s.gcr.io#registry.cn-hangzhou.aliyuncs.com/google_containers#g' |sh -x
    
    docker images |grep registry.cn-hangzhou.aliyuncs.com/google_containers |awk '{print "docker tag ",$1":"$2,$1":"$2}' |sed -e 's#registry.cn-hangzhou.aliyuncs.com/google_containers#k8s.gcr.io#2' |sh -x
    
    docker images |grep registry.cn-hangzhou.aliyuncs.com/google_containers |awk '{print "docker rmi ", $1":"$2}' |sh -x
    

    开机启动

    systemctl enable docker && systemctl start docker
    systemctl enable kubelet && systemctl start kubelet
    

    使用kubeadm安装Master

    kubeadm config print init-defaults > init.default.yaml
    kubeadm init --config=init.default.yaml
    

    修改init.default.yaml

    apiVersion: kubeadm.k8s.io/v1beta2
    bootstrapTokens:
    - groups:
      - system:bootstrappers:kubeadm:default-node-token
      token: abcdef.0123456789abcdef
      ttl: 24h0m0s
      usages:
      - signing
      - authentication
    kind: InitConfiguration
    localAPIEndpoint:
      # 修改为master的ip地址
      advertiseAddress: 192.168.124.180
      bindPort: 6443
    nodeRegistration:
      criSocket: /var/run/dockershim.sock
      name: k8s-master
      taints:
      - effect: NoSchedule
        key: node-role.kubernetes.io/master
    ---
    apiServer:
      timeoutForControlPlane: 4m0s
    apiVersion: kubeadm.k8s.io/v1beta2
    certificatesDir: /etc/kubernetes/pki
    clusterName: kubernetes
    controllerManager: {}
    dns:
      type: CoreDNS
    etcd:
      local:
        dataDir: /var/lib/etcd
    imageRepository: k8s.gcr.io
    kind: ClusterConfiguration
    # 修改版本为v1.17.2
    kubernetesVersion: v1.17.2
    networking:
      dnsDomain: cluster.local
      # 添加pod网段
      podSubnet: "10.224.0.0/16"
      serviceSubnet: 10.96.0.0/12
    scheduler: {}
    ### 使用ipvs
    ### yum install ipvsadm 
    ### 查看 ipvsadm -Ln
    ---
    apiVersion: kubeproxy.config.k8s.io/v1alpha1
    kind: KubeProxyConfiguration
    featureGates:
      SupportIPVSProxyMode: true
    mode: ipvs
    
    
    

    # 安装成功之后执行以下命令

    To start using your cluster, you need to run the following as a regular user:
    
      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
    
    You should now deploy a pod network to the cluster.
    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
      https://kubernetes.io/docs/concepts/cluster-administration/addons/
    
    Then you can join any number of worker nodes by running the following on each as root:
    
    kubeadm join 192.168.124.180:6443 --token abcdef.0123456789abcdef 
        --discovery-token-ca-cert-hash sha256:58056cdd9dfd9cc91da880adc63a2a7e9e7594eeda1bf7c2bcdceb0fbbf255ad 
    
    

    安装网络插件flannel

    kubectl create -f kube-flannel.yml
    
    # 查看node还是处于NoReay状态
    kubectl get node
    # NAME         STATUS     ROLES    AGE     VERSION
    # k8s-master   NotReady   master   5h41m   v1.17.2
    
    # NAME         STATUS   ROLES    AGE     VERSION
    # k8s-master   Ready    master   5h59m   v1.17.2
    

    集群

    • node1和node2加入节点执行
    kubeadm join 192.168.124.183:6443 --token abcdef.0123456789abcdef 
        --discovery-token-ca-cert-hash sha256:58056cdd9dfd9cc91da880adc63a2a7e9e7594eeda1bf7c2bcdceb0fbbf255ad 
    
    • 检测集群是否安装完成
    kubectl get node
    kubectl get pods --all-namespaces
    

    问题

    虚拟机配置比较低,所以会出现一些错误,我们可以按照提示忽略【非生产环境】

    [ERROR NumCPU CPU] 必须超过2个,把虚拟机的处理器设置一下即可。
    [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables] 解决:echo "1" > /proc/sys/net/bridge/bridge-nf-call-iptables
    [ERROR DirAvailable--var-lib-etcd]: /var/lib/etcd is not empty 解决:清空/var/lib/etcd 目录
    [ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1 解决: echo '1' > /proc/sys/net/ipv4/ip_forward

    借鉴1
    借鉴2

    K8s-安装
    K8s-Pod
    K8s-应用部署
    K8s-Helm

  • 相关阅读:
    python之编写购物车(第二天)
    day6作业--游戏人生
    day7 socket网络编程基础
    day7 --socket网络编程基础
    Python类和人类
    day7 socket网络编程
    day7异常处理
    day7面向对象--反射
    day6面向对象--类的特殊成员方法
    使用BigDecimal来进行精确计算
  • 原文地址:https://www.cnblogs.com/WangJunZzz/p/14460774.html
Copyright © 2011-2022 走看看