• k8s+kubeedge+sedna安装的全套流程


    一,环境准备

    把两台虚拟机的ip地址设置成静态的IP地址,否则ip地址会变

    虚拟机配置静态IP(NAT模式)_nat子网的准入_阿祖,收手吧的博客-CSDN博客​​​​​​

    节点IP软件 
    云节点192.168.133.139kubernetes+cloudcore
    边结点192.168.133.136kubeedge(edgecore)
    边结点192.168.133.137kubeedge(edgecore)

    映射好ssh端口(问题)

    二,主节点master的配置

    1,初始准备

    node节点和主节点一样,要执行到kubeadm init之前

    • 1、hostname配置
      (配置本机主机名,我们需要设置hostname为 “k8s-master” ,与hosts 相匹配)

    # 设置当前机器1的hostname
    hostnamectl set-hostname k8s-master
    # 查看当前机器hostname
    hostname

    • 2、hosts配置
    1. vim /etc/hosts
    2. 192.168.133.139 k8s-master
    3. 192.168.133.136 kubeedge1
    4. 192.168.133.137 kubeedge2
    如果不配置hostname 默认会配置为 localhost.localdomain,k8s 运行时会报错 Error getting node" err="node \"localhost.localdomain\" no t found
    • 3、基础依赖包安装

    # 系统时钟同步
    # 向阿里云服务器同步时间
    ntpdate time1.aliyun.com
    # 删除本地时间并设置时区为上海
    rm -rf /etc/localtime
    ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    # 查看时间
    date -R || date

    • 4、关闭防火墙、selinux
    1. systemctl stop firewalld
    2. systemctl disable firewalld
    3. sed -i 's/enforcing/disabled/' /etc/selinux/config
    4. setenforce 0
    • 5、关闭swap
    1. # 临时关闭Swap
    2. swapoff -a
    3. # 修改 /etc/fstab 删除或者注释掉swap的挂载,可永久关闭swap
    4. sed -i '/swap/s/^/#/' /etc/fstab
    5. # 修改完后我们检测以下,看最后一行swap 都是0 就成功了
    6. free -m
    • 6、网桥过滤
    1. # 网桥过滤
    2. vim /etc/sysctl.conf
    3. net.bridge.bridge-nf-call-ip6tables = 1
    4. net.bridge.bridge-nf-call-iptables = 1
    5. net.bridge.bridge-nf-call-arptables = 1
    6. net.ipv4.ip_forward=1
    7. net.ipv4.ip_forward_use_pmtu = 0
    8. # 生效命令
    9. sysctl --system
    10. # 查看效果
    11. sysctl -a|grep "ip_forward"
    • 7、开启ipvs
      kubernetes1.8版本开始,新增了kube-proxy对ipvs的支持,性能和追踪问题比iptable强)------ 此步骤为选填项,如果不执行那么默认使用iptables
    1. # 安装IPVS
    2. yum -y install ipset ipvsdm
    3. # 编译ipvs.modules文件
    4. vi /etc/sysconfig/modules/ipvs.modules
    5. # 文件内容如下
    6. #!/bin/bash
    7. modprobe -- ip_vs
    8. modprobe -- ip_vs_rr
    9. modprobe -- ip_vs_wrr
    10. modprobe -- ip_vs_sh
    11. modprobe -- nf_conntrack_ipv4
    12. # 赋予权限并执行
    13. chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules &&lsmod | grep -e ip_vs -e nf_conntrack_ipv4
    14. # 重启电脑,检查是否生效
    15. reboot
    16. lsmod | grep ip_vs_rr

    2,Docker安装

    • docker 换源安装
      1. # 安装yum utils
      2. yum install -y yum-utils
      3. # yum docker-ce config 换源
      4. yum-config-manager \
      5. --add-repo \
      6. https://download.docker.com/linux/centos/docker-ce.repo
      7. # 安装docker
      8. yum -y install docker-ce docker-ce-cli containerd.io
      9. # 启动docker, enable 为必须,k8s会检测docker.service
      10. systemctl enable docker && systemctl start docker

    • docker配置镜像加速
      exec-opts参数配置为native.cgroupdriver=systemd,这一步很重要,下面的镜像地址参考阿里云。
    1. # 创建docker目录
    2. mkdir -p /etc/docker
    3. # 设置镜像源, exec-opts必须指定否则k8s启动报错(cgroup、systemd)
    4. tee /etc/docker/daemon.json <<-'EOF'
    5. {
    6.   "exec-opts": ["native.cgroupdriver=systemd"],
    7.   "registry-mirrors": ["https://g6t55xi7.mirror.aliyuncs.com"]
    8. }
    9. EOF
    10. # 重启docke并生效镜像加速
    11. systemctl daemon-reload && systemctl restart docker

    3, Kubernetes安装

    • 配置kubernetes源
    1. cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    2. [kubernetes]
    3. name=Kubernetes
    4. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    5. enabled=1
    6. gpgcheck=1
    7. repo_gpgcheck=1
    8. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    9. EOF

    注意:阿里源并未与官网同步gpg(由于官网未开放同步方式, 可能会有索引gpg检查失败的情况,这时请用如下命令安装)

    1. # 检测可用的k8s版本(--nogpgcheck 忽略gpg检测)
    2. yum list --nogpgcheck --showduplicates kubeadm --disableexcludes=kubernetes
    3. # 找到我们想要安装的版本,并安装--------------这里我们用1.23.8版本,最新版目前是1.24.0 版本安装启用了docker 会有一些问题。
    4. # 安装kubelet、kubeadm、kubectl 组件--- 这里要注意,docker 版本和 k8s版本有关系,尽量使用支持区间的版本
    5. # yum install --nogpgcheck kubelet-1.23.8 kubeadm-1.23.8 kubectl-1.23.8
    6. yum -y install --nogpgcheck kubelet-1.23.8 kubeadm-1.23.8 kubectl-1.23.8
    • 安装完成后我们检查一下
    1. # 检查kubectl version
    2. kubectl version
    1. # 检查kubeadm版本
    2. kubeadm version
    • 启动k8s服务
    1. # 启动k8s服务
    2. systemctl enable kubelet && systemctl start kubelet
    3. # 查看服务状态
    4. systemctl status kubelet

    现在kubelet服务起不来是正常的,应该init之后就会起来

    k8s master 主节点初始化仅master节点执行– 这里考虑的是单master,多slave)

    注意:这里一定要改成自己master的IP地址,并且这句话需要在master节点上执行

    如果你没有改ip地址执行了一次,即使再改成正确的ip地址也会出现错误

    注意:这句话只在master节点执行,node节点不要执行!!!!!否则想把node节点join到master节点时join不进去!!!!需要重新在做一遍,很麻烦

    1. # 初始化
    2. kubeadm init \
    3. --image-repository registry.aliyuncs.com/google_containers \
    4. --apiserver-advertise-address=192.168.133.139 \
    5. --service-cidr=10.222.0.0/16 \
    6. --pod-network-cidr=10.244.0.0/16
    7. # 初始化过程比较长,需要下载一些资源
    8. #这里补充以下参数说明
    9. --apiserver-advertise-address=192.168.133.139 这个参数就是master主机的IP地址,例如我的Master主机的IP是:192.168.133.139
    10. --image-repository=registry.aliyuncs.com/google_containers 这个是镜像地址,由于国外地址无法访问,故使用的阿里云仓库地址:registry.aliyuncs.com/google_containers
    11. --service-cidr=10.222.0.0/16 这个参数后的IP地址直接就套用10.222.0.0/16 ,以后安装时也套用即可,不要更改
    12. --pod-network-cidr=10.244.0.0/16 k8s内部的pod节点之间网络可以使用的IP段,不能和service-cidr写一样,如果不知道怎么配,就先用这个10.244.0.0/16
    13. 还可以指定k8s版本,用以下参数即可
    14. --kubernetes-version=v1.23.8 这个参数是下载的k8s软件版本号
    15. 总之,只修改master主机IP,k8s软件版本)

    这时候你可以另起一个标签页去查看pull下来了什么以及情况

    这些都是k8s的一些重要组件

    刚才init的结果会提示你接下来需要做的步骤,还需要进行一些收尾工作,根据kubeadm init log 提示,执行以下命令

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

    然后,我们就可以进行k8s的节点查询

    1. # 查询节点
    2. kubectl get nodes

    此时, STATUS 是 NotReady状态,因为网络组件还未安装,Pod之间还不能通讯

    这时你可以查看刚才systemctl status kubelet这个命令查看kubelet的状态,服务起来了

    查看各命名空间下的Pod信息
     

    kubectl get pods --all-namespaces
    

    可以看到NDS解析服务coredns的pod还处于Pending状态未运行,也是因为网络组件还没安装。

    三、网络插件的安装

    下面我们进行网络组件的安装

    这里只简单说明下,推荐使用calico
    flannel 和 calico 是常用的网络插件。
    calico 的性能更好,使用场景更广一些。
    flannel 没有网络策略,不能控制pod的访问。
    这里我们用calico插件。

    curl https://docs.projectcalico.org/v3.18/manifests/calico.yaml -O
     
    kubectl apply -f calico.yaml

    kubectl get nodes

    安装完成, 如果有条件的话,现在就可以做一个快照了,因为后面的操作很可能会频繁出错,这里多做一些备份是好的习惯。
    下面介绍一些其他常用信息。

    1. # 查看k8s 运行日志命令, 这个比较有用,在k8s 启动、kubeadm init、kubeadm join 阶段可以辅助分析问题。
    2. journalctl -xefu kubelet
    3. # 查看k8s驱动
    4. systemctl show --property=Environment kubelet |cat
    5. # 重启k8s
    6. systemctl restart kubelet
    7. # 启动k8s
    8. systemctl start kubelet
    9. # 停止k8s
    10. systemctl stop kubelet
    11. # 开机自启k8s
    12. systemctl enable kubelet
    13. # dashboard 获取token
    14. kubectl describe secret admin-user -n kubernetes-dashboard
    15. # kubeadm 重置, 有些时候我们在使用kubeadm init 命令时会报错,我们根据错误提示修复问题后需要重新进行 init 操作,因此需要进行reset重置
    16. kubeadm reset

    四、安装KubeEdge

    还是在k8s-master节点!!!

    • 安装版本:v1.12.1
      如下图所示为kubernetes和Kubeedge版本对应关系,这里安装Kubeedge v1.12.1

    1 安装keadm

    如果网络不好,也可采用离线安装。将以下文件下载下来,下载地址:https://github.com/kubeedge/kubeedge/releases/tag/v1.12.1
    版本一定要对应,这里别整错了,都是v1.12.1

    1. uname -a
    2. # 下载Keadm
    3. wget https://github.com/kubeedge/kubeedge/releases/download/v1.12.1/keadm-v1.12.1-linux-amd64.tar.gz
    4. #解压
    5. tar zxvf keadm-v1.12.1-linux-amd64.tar.gz
    6. #添加执行权限
    7. chmod +x keadm-v1.12.1-linux-amd64/keadm/keadm
    8. #移动目录
    9. mv keadm-v1.12.1-linux-amd64/keadm/keadm /usr/local/bin/
    10. # 查看keadm是否安装
    11. keadm version
    12. #输出版本信息
    13. version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.1", GitCommit:"919ad5378eaca3cb0c666c22a19db01261cbc9a6", GitTreeState:"clean", BuildDate:"2022-11-02T08:22:56Z", GoVersion:"go1.17", Compiler:"gc", Platform:"linux/amd64"}

    2 启动Cloudcore

    运行以下命令启动cloudecode,修改下面地址为k8s-master主机地址

    1. keadm init --advertise-address="THE-EXPOSED-IP" --profile version=v1.12.1 --kube-config=/root/.kube/config
    2. # 查询cloudcore进程,如果查到cloudcore,表明启动成功
    3. ps -ef | grep cloudcore
    kubectl get all -n kubeedge
    

    正确返回结果

    到这里出现问题:ps -ef | grep cloudcore  执行这条语句应该返回两条,而我却返回一条,并且执行netstat -tpnl没有开放的10002和10003端口,这个是我的问题:不知道是不是node节点搭建了k8s的原因:解决方法:不应该按照网上node节点没有不是k8s的教程来做
    搭建Kubeedge框架 keadm init问题 · Issue #I88Z25 · 坐下来思考/kubeedge - Gitee.com

    这里停了两天,队友找了官方文档,我的输出结果和其一样,我把两个node结点也部署了k8S,加入到了master结点中去,和网上很多做法不同

    keadm manifest generate

    添加 --skip-crds 标志以跳过输出 CRD

    keadm manifest generate --advertise-address="THE-EXPOSED-IP" --kube-config=/root/.kube/config > kubeedge-cloudcore.yaml
    You can run  ps -elf | grep cloudcore command to ensure that cloudcore is running successfully.
    这个是启动成功的返回结果

    出现问题:execute keadm command failed: timed out waiting for the condition

    这是因为cloudcore没有污点容忍,默认master节点是不部署应用的,可以用下面的命令查看污点:

    1. kubectl describe nodes k8s-master | grep Taints

    把master的污点删掉

    1. kubectl taint node k8s-master node-role.kubernetes.io/master-
    2. # 然后重置
    3. keadm reset
    4. #再重新启动

    正常执行netstat -tpnl应该出现出现10000,和10002,这两个端口算正常,而我却没有

    出现10000,和10002,这两个端口算正常。

    如果安装失败,可以通过以下命令重置,然后重新安装

    keadm reset
    执行完这个,系统会有提示,你需要重新重新init和join等操作

    Setup Edge Side (KubeEdge Worker Node)

    设置边缘端(KubeEdge 工作节点)

    生成证书,后面会用到---在云端运行 keadm gettoken 将返回令牌,该令牌将在加入边缘节点时使用。
    1. # 使用以下命令生成证书
    2. keadm gettoken
    3. # 输出
    4. bd9827b8865d17a9a9422dedae3d0c67d17dfd9d4c8a66e2ae80f4eefc462680.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2OTc5MzY5ODN9.xW1RM2cisE2nNCUwka1VLQgWst-2H9UgB7rpgEtKQ7Q

    至此,如果不出问题的话云端节点暂时安装完成,可以再打个快照,下面安装边缘节点。

    五,边缘节点安装

    除了kubeadm init操作外其他的都执行

    下面我们简单说下 子节点服务器的操作流程:

    1. # 基础依赖包安装
    2. yum -y install wget vim net-tools ntpdate bash-completion
    3. # 修改当前机器名
    4. hostnamectl set-hostname k8s-slave02
    5. # 或 hostnamectl set-hostname k8s-slave03
    6. # 修改hosts文件
    7. vim /etc/hosts
    8. 192.168.56.105 k8s-master01
    9. 192.168.56.106 k8s-slave02
    10. 192.168.56.107 k8s-slave03
    11. # 系统时钟同步与时区配置
    12. ntpdate time1.aliyun.com
    13. rm -rf /etc/localtime
    14. ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    15. date -R || date
    16. # 关闭防火墙、selinux
    17. systemctl stop firewalld
    18. systemctl disable firewalld
    19. sed -i 's/enforcing/disabled/' /etc/selinux/config
    20. setenforce 0
    21. # 关闭swap
    22. swapoff -a
    23. sed -i '/swap/s/^/#/' /etc/fstab
    24. free -m
    25. # 网桥过滤
    26. vim /etc/sysctl.conf
    27. net.bridge.bridge-nf-call-ip6tables = 1
    28. net.bridge.bridge-nf-call-iptables = 1
    29. net.bridge.bridge-nf-call-arptables = 1
    30. net.ipv4.ip_forward=1
    31. net.ipv4.ip_forward_use_pmtu = 0
    32. # 生效命令 与 查看
    33. sysctl --system
    34. sysctl -a|grep "ip_forward"
    35. # docker安装
    36. yum install -y yum-utils
    37. yum-config-manager \
    38. --add-repo \
    39. https://download.docker.com/linux/centos/docker-ce.repo
    40. yum -y install docker-ce docker-ce-cli containerd.io
    41. systemctl enable docker && systemctl start docker
    42. # docker 镜像加速 与 cgroup配置
    43. mkdir -p /etc/docker
    44. tee /etc/docker/daemon.json <<-'EOF'
    45. {
    46. "exec-opts": ["native.cgroupdriver=systemd"],
    47. "registry-mirrors": ["https://fl791z1h.mirror.aliyuncs.com"]
    48. }
    49. EOF
    50. systemctl daemon-reload && systemctl restart docker
    51. # k8s安装
    52. cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    53. [kubernetes]
    54. name=Kubernetes
    55. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
    56. enabled=1
    57. gpgcheck=1
    58. repo_gpgcheck=1
    59. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    60. EOF
    61. yum -y install --nogpgcheck kubelet-1.23.8 kubeadm-1.23.8 kubectl-1.23.8
    62. # 启动k8s服务
    63. systemctl enable kubelet && systemctl start kubelet

    这里发现node结点是NotReady的,我们这里要等一段时间,我还以为哪里配错了

    1. # 在主节点上 查看所有nodes
    2. kubectl get nodes
    3. [root@k8s-master ~]# kubectl get node
    4. NAME STATUS ROLES AGE VERSION
    5. k8s-master Ready control-plane,master 41m v1.23.8
    6. kubeedge1 Ready <none> 13m v1.23.8
    7. kubeedge2 NotReady <none> 13m v1.23.8
    8. # 这个时候我们看到 `node1,node2` 已经加入到 k8s集群中了,但是`STATUS`还是`NotReady`
    9. # 此步骤比较耗时,我们多等一会,直到 `NotReady` 变为 `Ready`
    10. [root@k8s-master ~]# kubectl get node
    11. NAME STATUS ROLES AGE VERSION
    12. k8s-master Ready control-plane,master 43m v1.23.8
    13. kubeedge1 Ready <none> 15m v1.23.8
    14. kubeedge2 Ready <none> 15m v1.23.8
    15. # 至此,子节点加入成功
    16. # 为了稳妥起见,我们在 master 上发现子节点 状态由 `NotReady` 变成 `Ready` 后,我们对子节点k8s 进行重启
    17. systemctl restart kubelet

    子节点上我们尝试运行 k8s命令

    1. # 查看节点信息
    2. kubectl get nodes
    3. # 展示信息
    4. The connection to the server localhost:8080 was refused - did you specify the right host or port?

    我们发现:子节点无法运行kubectl命令

    原因:kubectl命令需要使用 kubernetes-admin 来运行

    解决办法: 我们将master节点的 admin.conf 复制到子节点上

    1. # master节点上操作:从master节点 复制到 子节点
    2. scp /etc/kubernetes/admin.conf root@192.168.133.136:/etc/kubernetes/
    3. # scp /etc/kubernetes/admin.conf root@192.168.133.137:/etc/kubernetes/
    4. # node节点上操作:配置环境变量
    5. echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
    6. source ~/.bash_profile
    7. # 而后我们在子节点上运行 命令
    8. kubectl get nodes
    9. [root@kubeedge1 ~]# kubectl get nodes
    10. NAME STATUS ROLES AGE VERSION
    11. k8s-master Ready control-plane,master 50m v1.23.8
    12. kubeedge1 Ready <none> 22m v1.23.8
    13. kubeedge2 Ready <none> 21m v1.23.8

    到这里主节点和边节点连通,可见masterk8s集群加入了两个node节点,而从node节点也可以查询到。

    在边缘节点安装keadm

    同理,先下载安装keadm,这个步骤跟云端一样,如下:

    1. # 下载Keadm
    2. wget https://github.com/kubeedge/kubeedge/releases/download/v1.12.1/keadm-v1.12.1-linux-amd64.tar.gz
    3. #解压
    4. tar zxvf keadm-v1.12.1-linux-amd64.tar.gz
    5. #添加执行权限
    6. chmod +x keadm-v1.12.1-linux-amd64/keadm/keadm
    7. #移动目录
    8. mv keadm-v1.12.1-linux-amd64/keadm/keadm /usr/local/bin/
    9. # 查看keadm是否安装
    10. keadm version
    11. #输出版本信息
    12. version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.1", GitCommit:"919ad5378eaca3cb0c666c22a19db01261cbc9a6", GitTreeState:"clean", BuildDate:"2022-11-02T08:22:56Z", GoVersion:"go1.17", Compiler:"gc", Platform:"linux/amd64"}

    Join Edge Node

    Keadm Join将安装Edgecore。它还提供了一个标志,通过该标志可以设置特定版本。它将从 dockerhub 拉取镜像 kubeedge/install-package,并将二进制 edgecore 从容器复制到 hostpath,然后启动 edgecore 作为系统服务。

    keadm join --cloudcore-ipport="192.168.133.139":10000 --token=bd9827b8865d17a9a9422dedae3d0c67d17dfd9d4c8a66e2ae80f4eefc462680.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2OTc5MzY5ODN9.xW1RM2cisE2nNCUwka1VLQgWst-2H9UgB7rpgEtKQ7Q --kubeedge-version=v1.12.1

    --Cloudcore-ipport 标志是强制性标志。
    如果要自动为边缘节点应用证书,则需要 --token。
    云侧和边缘端使用的 kubeEdge 版本应该相同。

    另起标签页发现会正在拉取镜像(docker images),返回结果----这个过程会很慢


    环境我终于搭出来了----记录一下10.28 因为快考试了时间比较紧,具体流程有时间会更新,最近在搭建有问题的可以私信我一起解决

    这是最近最开心的事了

  • 相关阅读:
    密码保护工具的编写
    吃透Chisel语言.31.Chisel进阶之通信状态机(三)——Ready-Valid接口:定义、时序和Chisel中的实现
    使用Python进行广告点击率预测
    Vue2 | Vant uploader实现上传文件和图片
    spark实验求TOP值
    【数据库】数据库系统概论(二)— 关系
    学习笔记——PCA降维sklearn
    「地埋式积水监测站」智慧防汛,科技先行
    Spring Boot开发之SpringSercurity(续)
    WebAssembly与Rust:高性能计算的前端应用
  • 原文地址:https://blog.csdn.net/zn2021220822/article/details/133145319