首页 > 其他分享 >安装Kubernetes

安装Kubernetes

时间:2023-02-26 19:35:38浏览次数:49  
标签:k8s name Kubernetes -- io kube 安装 flannel

2、安装Kubernetes

1、系统初始化

  • 初始化
    1. 关闭防火墙:

      systemctl stop firewalld
      systemctl disable firewalld
      
    2. 关闭 selinux:
      sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
      setenforce 0 # 临时

    3. 关闭 swap:
      swapoff -a # 临时
      vim /etc/fstab # 永久

    4. 主机名:

      主机名不能包含特殊符号

      https://blog.csdn.net/qq_44895681/article/details/119947302
      hostnamectl set-hostname

    5. 在 master 添加 hosts:
      cat >> /etc/hosts << EOF
      192.168.10.100 kubernetes_master kubernetes_master
      192.168.10.101 kubernetes_note01 kubernetes_note01
      192.168.10.102 kubernetes_note02 kubernetes_note02
      EOF

    6. 将桥接的 IPv4 流量传递到 iptables 的链:

      cat > /etc/sysctl.d/k8s.conf << EOF
      net.bridge.bridge-nf-call-ip6tables = 1
      net.bridge.bridge-nf-call-iptables = 1
      EOF
      
      sysctl --system # 生效
      
      
    7. 时间同步:

      1、部署集群时间同步NTP

      yum install ntpdate -y
      
      

2、安装docker

01、安装docker

3、使用kubeadm部署k8s

  • 0、在所有的节点上安装 kubeadm,kubelet 和 kubectl

    1. 更新仓库为阿里云

      cat <<EOF > /etc/yum.repos.d/kubernetes.repo
      [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. 安装特定版本的k8s(不同版本的k8s和docker不一定匹配)

      注意:这里安装的版本,会在后面的初始化init中用到,要保持版本一致
      yum -y install kubeadm-1.17.4 kubectl-1.17.4 kubelet-1.17.4
      systemctl enable kubelet

  • 1、部署 Kubernetes Master

    在 Master执行

    1. 查看k8s版本,修改下面的初始化命令

      [root@master home]# kubectl version
      Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.4", GitCommit:"8d8aa39598534325ad77120c120a22b3a990b5ea", GitTreeState:"clean", BuildDate:"2020-03-12T21:03:42Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"linux/amd64"}
      Server Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.4", GitCommit:"8d8aa39598534325ad77120c120a22b3a990b5ea", GitTreeState:"clean", BuildDate:"2020-03-12T20:55:23Z", GoVersion:"go1.13.8", Compiler:"gc", Platform:"linux/amd64"}
      
      
    2. 准备集群镜像

      1. 查看所需要的镜像的版本
        [root@master home]# kubeadm config images list
        
        I0131 11:34:52.187788   17583 version.go:251] remote version is much newer: v1.26.1; falling back to: stable-1.17
        W0131 11:34:52.997658   17583 validation.go:28] Cannot validate kubelet config - no validator is available
        W0131 11:34:52.997693   17583 validation.go:28] Cannot validate kube-proxy config - no validator is available
        k8s.gcr.io/kube-apiserver:v1.17.17
        k8s.gcr.io/kube-controller-manager:v1.17.17
        k8s.gcr.io/kube-scheduler:v1.17.17
        k8s.gcr.io/kube-proxy:v1.17.17
        k8s.gcr.io/pause:3.1
        k8s.gcr.io/etcd:3.4.3-0
        k8s.gcr.io/coredns:1.6.5
        
      2. 修改系统中images的内容为
        [root@mini1 ~]# images=(
          kube-apiserver:v1.17.4
          kube-controller-manager:v1.17.4
          kube-scheduler:v1.17.4
          kube-proxy:v1.17.4
          pause:3.1
          etcd:3.4.3-0
          coredns:1.6.5
        )
        
        
      3. 将镜像拉取到本地
        [root@mini1 ~]# for imageName in ${images[@]};do
          docker registry.aliyuncs.com/google_containers/$imageName
          docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
          docker rmi registry.aliyuncs.com/google_containers/$imageName 
        done
        
        
    3. 修改初始化master命令:

      1. 初始化
        kubeadm init \
        --apiserver-advertise-address=192.168.10.100 \
        --image-repository registry.aliyuncs.com/google_containers \
        --kubernetes-version v1.17.4 \
        --service-cidr=10.96.0.0/12 \
        --pod-network-cidr=10.244.0.0/16
        
         #当前k8s版本
         #链接访问ip 与本地不冲突就行
         #由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址。
        
        
      2. 重新初始化
        # 先重置
        kubeadm reset 
        
        kubeadm init \
        --apiserver-advertise-address=192.168.10.100 \
        --image-repository registry.aliyuncs.com/google_containers \
        --kubernetes-version v1.17.4 \
        --service-cidr=10.96.0.0/12 \
        --pod-network-cidr=10.244.0.0/16
        
         #当前k8s版本
         #链接访问ip 与本地不冲突就行
         #由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址。
        
        
    4. 初始化问题:

      https://cloud.tencent.com/developer/article/2039072

      https://www.jianshu.com/p/8e78e0abddf9

      https://blog.csdn.net/qq_43580215/article/details/125153959

    5. 使用 kubectl 工具:

      mkdir -p $HOME/.kube

      mkdir -p $HOME/.kube
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
      
      
  • 2、加入 Kubernetes Node

    1. 在 192.168.10.12/13(Node)执行

      向集群添加新节点,执行在 kubeadm init 输出的 kubeadm join 命令:

      kubeadm join 192.168.3.100:6443 --token i6802l.umkyymnqind3g1hi \
          --discovery-token-ca-cert-hash sha256:e09e9841c5605667815420717c87143887cfe7db07964cd40bcc516c22e0f0a6
      
      
    2. 默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:

      kubeadm token create --print-join-command
      
      
  • 3、安装 Pod 网络插件(CNI)在master上进行安装

    1. 获取yaml文件
      wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml --no-check-certificate 
      
      
      • 如果无法获取该文件复制下面内容手动编辑文件(不用修改):
        ---
        kind: Namespace
        apiVersion: v1
        metadata:
          name: kube-flannel
          labels:
            pod-security.kubernetes.io/enforce: privileged
        ---
        kind: ClusterRole
        apiVersion: rbac.authorization.k8s.io/v1
        metadata:
          name: flannel
        rules:
        - apiGroups:
          - ""
          resources:
          - pods
          verbs:
          - get
        - apiGroups:
          - ""
          resources:
          - nodes
          verbs:
          - get
          - list
          - watch
        - apiGroups:
          - ""
          resources:
          - nodes/status
          verbs:
          - patch
        - apiGroups:
          - "networking.k8s.io"
          resources:
          - clustercidrs
          verbs:
          - list
          - watch
        ---
        kind: ClusterRoleBinding
        apiVersion: rbac.authorization.k8s.io/v1
        metadata:
          name: flannel
        roleRef:
          apiGroup: rbac.authorization.k8s.io
          kind: ClusterRole
          name: flannel
        subjects:
        - kind: ServiceAccount
          name: flannel
          namespace: kube-flannel
        ---
        apiVersion: v1
        kind: ServiceAccount
        metadata:
          name: flannel
          namespace: kube-flannel
        ---
        kind: ConfigMap
        apiVersion: v1
        metadata:
          name: kube-flannel-cfg
          namespace: kube-flannel
          labels:
            tier: node
            app: flannel
        data:
          cni-conf.json: |
            {
              "name": "cbr0",
              "cniVersion": "0.3.1",
              "plugins": [
                {
                  "type": "flannel",
                  "delegate": {
                    "hairpinMode": true,
                    "isDefaultGateway": true
                  }
                },
                {
                  "type": "portmap",
                  "capabilities": {
                    "portMappings": true
                  }
                }
              ]
            }
          net-conf.json: |
            {
              "Network": "10.244.0.0/16",
              "Backend": {
                "Type": "vxlan"
              }
            }
        ---
        apiVersion: apps/v1
        kind: DaemonSet
        metadata:
          name: kube-flannel-ds
          namespace: kube-flannel
          labels:
            tier: node
            app: flannel
        spec:
          selector:
            matchLabels:
              app: flannel
          template:
            metadata:
              labels:
                tier: node
                app: flannel
            spec:
              affinity:
                nodeAffinity:
                  requiredDuringSchedulingIgnoredDuringExecution:
                    nodeSelectorTerms:
                    - matchExpressions:
                      - key: kubernetes.io/os
                        operator: In
                        values:
                        - linux
              hostNetwork: true
              priorityClassName: system-node-critical
              tolerations:
              - operator: Exists
                effect: NoSchedule
              serviceAccountName: flannel
              initContainers:
              - name: install-cni-plugin
                image: docker.io/flannel/flannel-cni-plugin:v1.1.2
               #image: docker.io/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.1.2
                command:
                - cp
                args:
                - -f
                - /flannel
                - /opt/cni/bin/flannel
                volumeMounts:
                - name: cni-plugin
                  mountPath: /opt/cni/bin
              - name: install-cni
                image: docker.io/flannel/flannel:v0.20.2
               #image: docker.io/rancher/mirrored-flannelcni-flannel:v0.20.2
                command:
                - cp
                args:
                - -f
                - /etc/kube-flannel/cni-conf.json
                - /etc/cni/net.d/10-flannel.conflist
                volumeMounts:
                - name: cni
                  mountPath: /etc/cni/net.d
                - name: flannel-cfg
                  mountPath: /etc/kube-flannel/
              containers:
              - name: kube-flannel
                image: docker.io/flannel/flannel:v0.20.2
               #image: docker.io/rancher/mirrored-flannelcni-flannel:v0.20.2
                command:
                - /opt/bin/flanneld
                args:
                - --ip-masq
                - --kube-subnet-mgr
                resources:
                  requests:
                    cpu: "100m"
                    memory: "50Mi"
                securityContext:
                  privileged: false
                  capabilities:
                    add: ["NET_ADMIN", "NET_RAW"]
                env:
                - name: POD_NAME
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.name
                - name: POD_NAMESPACE
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.namespace
                - name: EVENT_QUEUE_DEPTH
                  value: "5000"
                volumeMounts:
                - name: run
                  mountPath: /run/flannel
                - name: flannel-cfg
                  mountPath: /etc/kube-flannel/
                - name: xtables-lock
                  mountPath: /run/xtables.lock
              volumes:
              - name: run
                hostPath:
                  path: /run/flannel
              - name: cni-plugin
                hostPath:
                  path: /opt/cni/bin
              - name: cni
                hostPath:
                  path: /etc/cni/net.d
              - name: flannel-cfg
                configMap:
                  name: kube-flannel-cfg
              - name: xtables-lock
                hostPath:
                  path: /run/xtables.lock
                  type: FileOrCreate
        
    2. 默认镜像地址无法访问,sed命令修改为docker hub镜像仓库。
      kubectl apply -f ./kube-flannel.yml
      
      
    3. 查看notes状态
      [root@master home]# kubectl get nodes
      NAME     STATUS   ROLES    AGE   VERSION
      master   Ready    master   28m   v1.17.4
      note01   Ready    <none>   26m   v1.17.4
      note02   Ready    <none>   26m   v1.17.4
      
    4. 查看系统namespace中pod的运行情况
      [root@master home]# kubectl get pods -n kube-system
      NAME                             READY   STATUS    RESTARTS   AGE
      coredns-9d85f5447-j8r49          1/1     Running   0          29m
      coredns-9d85f5447-jmzlz          1/1     Running   0          29m
      etcd-master                      1/1     Running   0          29m
      kube-apiserver-master            1/1     Running   0          29m
      kube-controller-manager-master   1/1     Running   0          29m
      kube-proxy-4fgl5                 1/1     Running   0          27m
      kube-proxy-mgsbf                 1/1     Running   0          28m
      kube-proxy-tvbjc                 1/1     Running   0          29m
      kube-scheduler-master            1/1     Running   0          29m
      
  • 4、测试 kubernetes 集群

    1. 在 Kubernetes 集群中创建一个 pod,验证是否正常运行:

    2. kubectl create deployment nginx --image=nginx
      $ kubectl create deployment nginx --image=nginx
      $ kubectl expose deployment nginx --port=4040 --type=NodePort
      $ kubectl get pod,svc

    3. 问题:如果创创建不成功,参考链接

      https://www.cnblogs.com/digdeep/p/12319340.html

    4. 访问地址:http://NodeIP:Port (任意一个node的ip,加上命令行出来的port

  • 5、安装监控界面

    • 卸载rancher

      #!/bin/bash
      
      # 卸载rancher2.x
      
      KUBE_SVC='
      kubelet
      kube-scheduler
      kube-proxy
      kube-controller-manager
      kube-apiserver
      '
      for kube_svc in ${KUBE_SVC};
      do
        # 停止服务
        if [[ `systemctl is-active ${kube_svc}` == 'active' ]]; then
          systemctl stop ${kube_svc}
        fi
        # 禁止服务开机启动
        if [[ `systemctl is-enabled ${kube_svc}` == 'enabled' ]]; then
          systemctl disable ${kube_svc}
        fi
      done
      # 停止所有容器
      docker stop $(docker ps -aq)
      # 删除所有容器
      docker rm -f $(docker ps -qa)
      # 删除所有容器卷
      docker volume rm $(docker volume ls -q)
      # 卸载mount目录
      for mount in $(mount | grep tmpfs | grep '/var/lib/kubelet' | awk '{ print $3 }') /var/lib/kubelet /var/lib/rancher;
      do
        umount $mount;
      done
      # 备份目录
      mv /etc/kubernetes /etc/kubernetes-bak-$(date +"%Y%m%d%H%M")
      mv /var/lib/etcd /var/lib/etcd-bak-$(date +"%Y%m%d%H%M")
      mv /var/lib/rancher /var/lib/rancher-bak-$(date +"%Y%m%d%H%M")
      mv /opt/rke /opt/rke-bak-$(date +"%Y%m%d%H%M")
      # 删除残留路径
      rm -rf /etc/ceph \
          /etc/cni \
          /opt/cni \
          /run/secrets/kubernetes.io \
          /run/calico \
          /run/flannel \
          /var/lib/calico \
          /var/lib/cni \
          /var/lib/kubelet \
          /var/log/containers \
          /var/log/kube-audit \
          /var/log/pods \
          /var/run/calico
      # 清理网络接口
      no_del_net_inter='
      lo
      docker0
      eth
      ens
      bond
      '
      network_interface=`ls /sys/class/net`
      for net_inter in $network_interface;
      do
        if ! echo "${no_del_net_inter}" | grep -qE ${net_inter:0:3}; then
          ip link delete $net_inter
        fi
      done
      # 清理残留进程
      port_list='
      80
      443
      6443
      2376
      2379
      2380
      8472
      9099
      10250
      10254
      '
      for port in $port_list;
      do
        pid=`netstat -atlnup | grep $port | awk '{print $7}' | awk -F '/' '{print $1}' | grep -v - | sort -rnk2 | uniq`
        if [[ -n $pid ]]; then
          kill -9 $pid
        fi
      done
      kube_pid=`ps -ef | grep -v grep | grep kube | awk '{print $2}'`
      if [[ -n $kube_pid ]]; then
        kill -9 $kube_pid
      fi
      
      # 清理Iptables表
      ## 注意:如果节点Iptables有特殊配置,以下命令请谨慎操作
      #sudo iptables --flush
      #sudo iptables --flush --table nat
      #sudo iptables --flush --table filter
      #sudo iptables --table nat --delete-chain
      #sudo iptables --table filter --delete-chain
      
      systemctl restart docker
      
      
    • 安装rancher

      https://blog.csdn.net/qq_37481017/article/details/118999716

      https://blog.csdn.net/qq_37481017/article/details/119002325

      https://www.cnblogs.com/kevingrace/p/14617757.html

  • 6、完全卸载k8s

    脚本

    #!/bin/bash
    yum remove -y kube*
    kubeadm reset -f
    modprobe -r ipip
    lsmod
    rm -rf ~/.kube/
    rm -rf /etc/kubernetes/
    rm -rf /etc/systemd/system/kubelet.service.d
    rm -rf /etc/systemd/system/kubelet.service
    rm -rf /usr/bin/kube*
    rm -rf /etc/cni
    rm -rf /opt/cni
    rm -rf /var/lib/etcd
    rm -rf /var/etcd
    yum clean all
    yum -y remove kube*
    
    

标签:k8s,name,Kubernetes,--,io,kube,安装,flannel
From: https://www.cnblogs.com/HYBG/p/17157398.html

相关文章

  • 今天整理一下Android studio安装时遇到的问题-心血来潮
    1:每日总结-23.2.21-lao_bing-博客园(cnblogs.com)2:Androidstudio安装教程_一纸梦的博客-CSDN博客_androidstudio3:AndroidStudio中创建项目时,activity_main.xml不......
  • CAD安装失败,如何才能删除(卸载)CAD?三步完美卸载CAD软件
    CAD安装失败,怎么样才能彻底删除CAD各种残留注册表?有时候我们想将CAD重新安装,但却显示CAD已经安装,但又不见CAD软件程序文件,然后我们就会产生这样的疑问:CAD无法重新安装是怎......
  • linux编译安装3.7.12
    基本环境安装yum-yinstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgccmake1.下载到本地并解压wgethttps:/......
  • 数据驱动ddt安装3种方式_unittest_Python
    命令行安装  pipinstallddt-i 管理员运行命令提示符  pycharm设置里安装pycharmPythonPackages里安装......
  • ubuntu 安装docker
    ubuntu安装docker目的学习docker构建一个自己的gitlab+jenkins的自动化构建部署的环境,用来学习C/C++,python,javadocker安装我参考的是这个网页,https://www.runoob......
  • OpenEuler安装xfce桌面 及 远程桌面软件xrdp
    1.xfce桌面安装,参考官网文档:InstallXfce(openeuler.org)安装后心得:dnf库里的软件版本都比较低,安装上这个xfce后,发现默认没有浏览器,用dnf安装的Firefox只有74版......
  • 09. Kubernetes - 可变信息配置管理(ConfigMap)
    ConfigMap前面的资源对象并不能满足日常工作中的所有需求,一个最重要的需求就是应用的配置管理,特别是可变配置。比如,在开发过程中程序需要配置MySQL或者Redis的连接地......
  • 群晖 DSM 7.0 Docker 部署安装 ZeroTier(转)
    群晖DSM7.0Docker部署安装ZeroTierhttps://www.vvso.cn/xlbk/20273.html群晖Syn­ol­ogy发布NAS系统DSM7.0正式版本,第一时间更新了,也发现挂掉了不少的套件,......
  • python下载与安装
    python下载与安装下载官网下载地址:https://www.python.org/可以下载最新版本,这里以下载3.7.2为例,可以复制下面链接进行下载64bitwindows:https://www.python.org/ftp/......
  • SQL server 2019 Express 安装及其一些问题
    1.安装步骤我是遇到问题后,从B站上面查找的参考资料,因为不知道是否涉及版权问题,所以大家自己搜索一下1.从官网上下载安装包,我下载的是Express版,文件名字如......