• 【转】云主机 ubuntu部署kubernetes *访问 dashboard


    原文:https://zhuanlan.zhihu.com/p/492049004

    在自己的腾讯云服务器上有测试成功。 记得云服务器防火墙先开放 8001, 8080

    kubectl proxy --address='0.0.0.0' --accept-hosts='^*$'

    这步可以不用。

    这步执行后,可以访问8001,但是登录不了dashboard

    只需这步即可以:kubectl port-forward -n kubernetes-dashboard --address 0.0.0.0 service/kubernetes-dashboard 8080:443

    打开浏览器:可以看到登录页面

    kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

    复制token到登录页面,两个token都可以登录。

    --------------------

    前言:最近在学习k8s, 在自己的云服务器上折腾了1天,终于是勉强能访问dashboard页面了。下面把安装部署记录下来,有不对的地方欢迎指正。

    参照手册: Kubernetes

    云主机:腾讯云

    系统环境: ubuntu 18.04

     

    前置操作:

    1. 禁用swap

     sudo swapoff -a

    2. 允许 iptables 检查桥接流量

    确保 br_netfilter 模块被加载。这一操作可以通过运行 lsmod | grep br_netfilter 来完成。若要显式加载该模块,可执行 sudo modprobe br_netfilter

    为了让你的 Linux 节点上的 iptables 能够正确地查看桥接流量,你需要确保在你的 sysctl 配置中将 net.bridge.bridge-nf-call-iptables 设置为 1。例如:

    cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
    br_netfilter
    EOF
    
    cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    EOF
    
    sudo sysctl --system

    3. 关闭 ufw

    sudo ufw disable

     

    安装软件:

    1. 安装docker
    sudo add-apt-repository -r "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
    sudo apt-get install docker-ce

    2. 更新 apt 包索引并安装使用 Kubernetes apt 仓库所需要的包:

    sudo apt-get update 
    sudo apt-get install -y apt-transport-https ca-certificates curl

    3. 添加源

    # 添加阿里key
    curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
    # 添加阿里镜像源
    cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
    deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main 
    EOF
    # 更新
    sudo apt update

    4. 安装

    sudo apt install -y kubelet kubeadm kubectl
    • kubeadm:用来初始化集群的指令。
    • kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
    • kubectl:用来与集群通信的命令行工具。

    到这里基本没什么问题, 下面我们开始部署单机k8s

    使用 kubeadm 创建集群

    使用kubeadm,你能创建一个符合最佳实践的最小化 Kubernetes 集群

     kubeadm init --image-repository registry.aliyuncs.com/google_containers  --pod-network-cidr 10.244.0.0/16

    注意:

    1. 若主机是阿里云、腾讯云的ECS,--apiserver-advertise-address设置的IP不能是公网IP,否则会初始化失败,因此要写内网IP或不配置此参数
    2. 如果不指定 --pod-network-cidr , 则会使用默认的值 。 安装 网络附加组件:kube-flannel时, 会导致 CrashLoopBackOff 错误。因为与示例的 kube-flannel.yml 中的 network冲突当然也可以手动修改 yml的参数。

    查看初始化后的参数命令

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

     

    等待一会,初始化成功。你会看到下面的内容

    our Kubernetes control-plane has initialized successfully!
    
    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:
      /docs/concepts/cluster-administration/addons/
    
    You can now join any number of machines by running the following on each node
    as root:
    
      kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha


    手动执行

    mkdir -p $HOME/.kube   
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config   
    sudo chown $(id -u):$(id -g) $HOME/.kube/config

    或者,如果你是 root 用户,则可以运行:

    export KUBECONFIG=/etc/kubernetes/admin.conf

    保存你的token 信息

    如果忘记可使用命令kubeadm token create --print-join-command查看。

    若初始化k8s集群失败,在下一次执行kubeadm init初始化命令前,先执行kubeadm reset命令重置节点,清理环境。否则再次kubeadm init初始化时会报Port 10250 is in use等错误。


    查看所有pod

    kubectl get pods --all-namespaces

    status => Running 代表pod 正常运行

    我初始化之后, coredns 显示 pending, 需要手动排查错误原因。

     kubectl describe pods -n kube-system coredns

    可以看到错误信息是

    open /run/flannel/subnet.env: no such file or directory

    手动创建 /run/flannel/subnet.env, 编辑内容

    FLANNEL_NETWORK=10.244.0.0/16
    FLANNEL_SUBNET=10.244.0.1/24
    FLANNEL_MTU=1450
    FLANNEL_IPMASQ=true

    保存,重新启动pod。

     kubectl get pods -n kube-system coredns -o yaml | kubectl replace --force -f

     

    安装 pod 网络附加组件 flannel

    kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

    安装Dashboard UI

    kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml

    第一次Pull 镜像有些慢

    你可以使用 kubectl 命令行工具来启用 Dashboard 访问,命令如下:

    kubectl proxy

    kubectl 会使得 Dashboard 可以通过  访问。

    如果你是本地服务,那么这样已经能访问了。

    云主机 开放 8001 端口(腾讯云是 防火墙配置, 阿里云是安全规则)

    通过 http://[公网ip]:8001/..... 访问, 出现 forbidden ..... 需要增加参数开放内网访问

    kubectl proxy --address='0.0.0.0' --accept-hosts='^*$'&

    再次访问 终于出现了网页

    但是下面那排红色是几个意思。。。只能通过https访问吗。

    没事,下面我们继续操作, 通过接口转发443

    kubectl port-forward -n kubernetes-dashboard --address 0.0.0.0 service/kubernetes-dashboard 8080:443

    直接通过 https://[公网ip]:8080/ 访问

    终于可以了! 接下来我们创建权限及token

    创建 kubeadm-init.yaml 文件

    apiVersion: kubeadm.k8s.io/v1beta3
    bootstrapTokens:
    - groups:
      - system:bootstrappers:kubeadm:default-node-token
      token: abcdef.0123456789abcdef
      ttl: 24h0m0s
      usages:
      - signing
      - authentication
    kind: InitConfiguration
    localAPIEndpoint:
      advertiseAddress: 1.2.3.4
      bindPort: 6443
    nodeRegistration:
      criSocket: /var/run/dockershim.sock
      imagePullPolicy: IfNotPresent
      name: node
      taints: null
    ---
    apiServer:
      timeoutForControlPlane: 4m0s
    apiVersion: kubeadm.k8s.io/v1beta3
    certificatesDir: /etc/kubernetes/pki
    clusterName: kubernetes
    controllerManager: {}
    dns: {}
    etcd:
      local:
        dataDir: /var/lib/etcd
    imageRepository: k8s.gcr.io
    kind: ClusterConfiguration
    kubernetesVersion: 1.23.0
    networking:
      dnsDomain: cluster.local
      serviceSubnet: 10.96.0.0/12
    scheduler: {}

    创建权限用户

    kubectl apply -f dash-admin-user.yml

    获取Token

    kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

    把输出复制到登录页面

     

     

    终于打开了!!!

    发布于 2022-04-02 15:17
    Docker
  • 相关阅读:
    一只小小麻雀——基于语法分析工具Gold开发的加减法解释器
    儿子和女儿——解释器和编译器的区别与联系
    商用密码企业调研(必做)
    create dict in python
    sequence in python
    Cpp pointers
    sorted: list sort in python
    the array.length() of C++
    string of Cpp
    srandom and random
  • 原文地址:https://www.cnblogs.com/oxspirt/p/16357003.html
Copyright © 2020-2023  润新知