【kubeadm】快速理解并且在虚拟机上快速部署k8s集群,包括dashboard界面,版本最新 Kubernetes v1.20.0

服务器说明

系统类型IP地址节点角色Hostname
centos-7.3192.168.60.2mastermaster
centos-7.3192.168.60.3workernode1
centos-7.3192.168.60.4workerNode2

操作每一台机器

初始化Centos环境

yum update # 更新Centos环境
yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp # 安装依赖包
yum install ntpdate -y && ntpdate time.windows.com # 时间同步
systemctl stop firewalld && systemctl disable firewalld # 关闭防火墙
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT # 重置iptables
swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab # 关闭swap
sed -i 's/enforcing/disabled/' /etc/selinux/config && setenforce 0 # 关闭selinux
service dnsmasq stop && systemctl disable dnsmasq # 关闭dnsmasq(否则可能导致docker容器无法解析域名)

设置域名映射

hostname # 查看主机名
hostnamectl set-hostname <your_hostname> # 修改主机名

vi /etc/hosts # 配置host,使所有节点之间可以通过hostname互相访问,将同一份host写到每台机器 
192.168.60.2  master
192.168.60.3  node1
192.168.60.4  node2

如果需要在主机上用域名访问,则将该配置文件同样配置到主机上则可用 https://master:30000 访问 dashboard

系统参数设置

  • 配置内核参数,将桥接的IPv4流量传递到iptables的链*

    cat > /etc/sysctl.d/kubernetes.conf <<EOF
    net.bridge.bridge-nf-call-iptables=1
    net.bridge.bridge-nf-call-ip6tables=1
    net.ipv4.ip_forward=1
    vm.swappiness=0
    vm.overcommit_memory=1
    vm.panic_on_oom=0
    fs.inotify.max_user_watches=89100
    EOF
    
  • 生效文件

    sudo modprobe br_netfilter
    sysctl -p /etc/sysctl.d/kubernetes.conf
    

安装Docker

  • 清理系统中残留的Docker

    sudo yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-selinux \
                      docker-engine-selinux \
                      docker-engine
    
  • 安装依赖包

    sudo yum install -y yum-utils
    
  • 阿里云源(推荐)

    sudo yum-config-manager \
        --add-repo \
        https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  • 官方源

    sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
    
  • 安装Docker

    sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
    sudo yum install docker-ce docker-ce-cli containerd.io
    
  • 设置Dokcer开机启动并启动

    sudo systemctl enable docker
    sudo systemctl start docker
    

安装Kubeadm

  • 源代理

    • 官方源

      cat <<EOF > /etc/yum.repos.d/kubernetes.repo
      [kubernetes]
      name=Kubernetes
      baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
      enabled=1
      gpgcheck=1
      repo_gpgcheck=1
      gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
              https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
      EOF
      
    • 阿里云源(经常翻车)

      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=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
      
  • 安装指定版本的管理工具(这里用的 1.20.0)

    yum list kubelet --showduplicates | sort -r
    yum install -y kubelet-1.20.0-0.x86_64 kubeadm-1.20.0-0.x86_64 kubectl-1.20.0-0.x86_64 kubernetes-cni-0.8.7-0.x86_64
    systemctl enable kubelet && systemctl start kubelet
    
  • 部署CNI网络插件

    kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
    

操作Master节点

  • 初始化 apiserver(用云服务器的同学们,跳过keepalived的部署)

    kubeadm init --kubernetes-version=1.20.0  \
    --apiserver-advertise-address=192.168.60.2   \
    --image-repository registry.aliyuncs.com/google_containers  \
    --service-cidr=10.10.0.0/16 --pod-network-cidr=10.122.0.0/16
    

    提示initialized successfully!表示初始化成功

    输出 kubeadm join 192.168.60.5:6443 --token ...该语句用来其它节点加入改master集群

    kubeadm join 192.168.60.5:6443 --token ppjplt.c34cbrw7q71ixfcl \ --discovery-token-ca-cert-hash sha256:ce9d46777bb3cadc8a55fb551cdfe4f0715358d7ad195a38cdb9fb828c708f39

    to start using you 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
    kubectl get nodes
    
  • 发送admin.conf到所有节点(node),可以在任何一个节点管理集群

    scp /etc/kubernetes/admin.conf root@node1:/etc/kubernetes/admin.conf
    scp /etc/kubernetes/admin.conf root@node2:/etc/kubernetes/admin.conf
    ...
    
  • 安装dashboard

    dashboard 找到 recommended.yaml文件地址并下载

    这里使用的文件 https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.5/aio/deploy/recommended.yaml

    v2.1.0 跟 kubectl工具不兼容

    没有外部提供负载均衡器 Load Balancer则需要将 dashboard 配置文件的 service修改成 NodePord向外暴露端口

    kind: Service
    apiVersion: v1
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
      name: kubernetes-dashboard
      namespace: kubernetes-dashboard
    spec:
      type: NodePort # nodeport方式暴露
      ports:
        - port: 443
          targetPort: 8443
          nodePort: 30000 # #Node节点的端口,<nodeIP>:nodePort 是提供给集群外部客户访问service的入口
      selector:
        k8s-app: kubernetes-dashboard
    
    kubectl create -f recommended.yaml
    
  • 查看服务运行情况

    kubectl get deployment kubernetes-dashboard -n kubernetes-dashboard
    kubectl --namespace kubernetes-dashboard get pods -o wide
    kubectl get services kubernetes-dashboard -n kubernetes-dashboard
    netstat -ntlp|grep 30000 # 具体端口搜yaml文件里 3000开头的端口号
    
  • 登陆dashboard

    https://master:30000
    #这是选择token方式登录,下面获取token
    kubectl create serviceaccount dashboard-admin -n kube-system
    kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
    kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
    #以上命令解释:创建admin账号,授权管理集群,复制控制台最后输出的token用于登录即可
    #如果忘记token,使用以下命令获取
    kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
    
    • 推荐使用firefox浏览器,其他浏览器可能会因为证书问题无法访问

    • 如果Chrome证书错误无法访问可以在任意空白处输入thisisunsafe,跳过证书认证

      证书错误
      正常访问

操作Worker节点

  • Master节点配置分发到各个Worker节点

    #在node节点上加入环境变量
    echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
    source /etc/profile
    #执行完成以后可以在任意node节点上管理集群,查看节点是否正常
    kubectl get nodes
    
  • 部署CNI网络插件(如果之前已经配置过则不需要执行)

    kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
    
  • 加入到Master节点

    kubeadm join master:6443 --token ppjplt.c34cbrw7q71ixfcl \
    --discovery-token-ca-cert-hash sha256:ce9d46777bb3cadc8a55fb551cdfe4f0715358d7ad195a38cdb9fb828c708f39
    
如果 token过期或者遗忘
  • kubeadm token list

  • 重新生成 token kubeadm token create

  • 获取 ca 证书的 hash 值

    openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed ``'s/^.* //'
    

其它

  1. 设置固定机器IP
  2. 关于 NodePort 开启的dashboard,可以参考 bare-metal裸机设置,默认的NodePort需要必须通过域名/ip+端口来访问,但是如果使用外部LoadBalanced则可以不需要加端口号

有什么疑问可以再评论下方回复,在线回复

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值