# 此方式下安装kubernetes集群要求Centos版本要在7.5或之上
[root@master ~]# cat /etc/redhat-release
Centos Linux 7.5.1804 (Core)
为了方便集群节点间的直接调用,在这个配置一下主机名解析,企业中推荐使用内部DNS服务器
# 主机名成解析 编辑三台服务器的/etc/hosts文件,添加下面内容
192.168.227.100 master
192.168.227.101 computenode
192.168.227.102 edgenode
kubernetes要求集群中的节点时间必须精确一直,这里使用chronyd服务从网络同步时间
企业中建议配置内部的会见同步服务器
# 启动chronyd服务
[root@master ~]# systemctl start chronyd
[root@master ~]# systemctl enable chronyd
[root@master ~]# date
kubrnetes和docker 在运行的中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则
# 1 关闭firewalld服务
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
# 2 关闭iptables服务
[root@master ~]# systemctl stop iptables
[root@master ~]# systemctl disable iptables
selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题
# 编辑 /etc/selinux/config 文件,修改SELINUX的值为disable
# 注意修改完毕之后需要重启linux服务,后面会统一重启
SELINUX=disabled
swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用
启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备
但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明
# 编辑分区配置文件/etc/fstab,注释掉swap分区一行
# 注意修改完毕之后需要重启linux服务
vim /etc/fstab
注释掉 /dev/mapper/centos-swap swap
# /dev/mapper/centos-swap swap
# 修改linux的内核采纳数,添加网桥过滤和地址转发功能
# 编辑/etc/sysctl.d/kubernetes.conf文件,添加如下配置:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
# 重新加载配置
[root@master ~]# sysctl -p
# 加载网桥过滤模块
[root@master ~]# modprobe br_netfilter
# 查看网桥过滤模块是否加载成功
[root@master ~]# lsmod | grep br_netfilter
br_netfilter
在Kubernetes中Service有两种带来模型,一种是基于iptables的,一种是基于ipvs的两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块
# 1.安装ipset和ipvsadm
[root@master ~]# yum install ipset ipvsadm -y
# 2.添加需要加载的模块写入脚本文件
[root@master ~]# cat < /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
# 3.为脚本添加执行权限
[root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules
# 4.执行脚本文件
[root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules
# 5.查看对应的模块是否加载成功
[root@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4
# 1、切换镜像源
[root@master ~]# yum install -y yum-utils
[root@master ~]# yum -y update
[root@master ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makecache fast
# 2、查看当前镜像源中支持的docker版本
[root@master ~]# yum list docker-ce --showduplicates
# 3、安装特定版本的docker-ce
# 必须制定--setopt=obsoletes=0,否则yum会自动安装更高版本
[root@master ~]# yum -y install docker-ce-20.10.21
# 4、添加一个配置文件
#Docker 在默认情况下使用Vgroup Driver为cgroupfs,而Kubernetes推荐使用systemd来替代cgroupfs
[root@master ~]# mkdir /etc/docker
[root@master ~]# cat < /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]
}
EOF
# 5、启动dokcer
[root@master ~]# systemctl restart docker
[root@master ~]# systemctl enable docker
# 1、由于kubernetes的镜像在国外,速度比较慢,这里切换成国内的镜像源
# 2、编辑/etc/yum.repos.d/kubernetes.repo,添加下面的配置
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgchech=1
repo_gpgcheck=1
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
# 3、安装kubeadm、kubelet和kubectl
[root@master ~]# yum -y install kubelet-1.21.3 kubeadm-1.21.3 kubectl-1.21.3
# 4、配置kubelet的cgroup
#编辑/etc/sysconfig/kubelet, 添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
# 5、设置kubelet开机自启
[root@master ~]# systemctl enable kubelet
# 在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看,查看版本
[root@master ~]# kubeadm config images list
# 下载镜像
# 此镜像kubernetes的仓库中,由于网络原因,无法连接,下面提供了一种替换方案
images=(
kube-apiserver:v1.21.3
kube-controller-manager:v1.21.3
kube-scheduler:v1.21.3
kube-proxy:v1.21.3
pause:3.4.1
etcd:3.4.13-0
coredns:1.8.0
)
for imageName in ${images[@]};do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
下面的操作只需要在master节点上执行即可
# 创建集群
[root@master ~]# kubeadm init \
--apiserver-advertise-address=192.168.227.100 \ # 这里是IP地址
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.21.3 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-cert-extra-sans=192.168.227.100
# 创建必要文件
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
下面的操作只需要在compute node节点上执行即可(不要在边缘端执行)
kubeadm join 192.168.61.100:6443 --token 7biry1.wd2n3zl1irxjqh1s \
--discovery-token-ca-cert-hash sha256:65884ad103ed898e51f4e6d95f96ca6f7ed32ccb387d7d70843428f69c074d0f
在master上查看节点信息
[root@master ~]# kubectl get nodes 状态是NotReady,因为网络没有装
NAME STATUS ROLES AGE VERSION
master NotReady master 6m v1.21.3
computenode NotReady 22s v1.21.3
https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml # 保存到桌面传过去
kubectl apply -f kube-flannel.yml
# 下载文件 解压Go包
wget https://golang.google.cn/dl/go1.17.linux-amd64.tar.gz
tar -zxf go1.17.linux-amd64.tar.gz -C /usr/local
# 配置环境变量
vim /etc/profile
#golang config
export GOROOT=/usr/local/go
export GOPATH=/data/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
# 将变量配置生效
source /etc/profile
go version
wget https://github.com/kubeedge/kubeedge/releases/download/v1.12.1/keadm-v1.12.1-linux-amd64.tar.gz #下载keadm,根据版本可以到官网下载
tar -zxvf keadm-v1.12.1-linux-amd64.tar.gz # 解压keadm的tar.gz的包
cd keadm-v1.12.1-linux-amd64/keadm/
cp keadm /usr/sbin/ #将其配置进入环境变量,方便使用
# 去除污点
kubectl taint node master2 node-role.kubernetes.io/master-
# 二选一(看目录)
./keadm-v1.12.1-linux-amd64/keadm/keadm init --advertise-address="192.168.227.100" --kubeedge-version=1.12.1
./keadm init --advertise-address="192.168.227.100" --kubeedge-version=1.12.1
# 查看kubeedge状态(可以重启试试重新加入)
kubectl get all -nkubeedge
https://blog.csdn.net/weixin_38159695/article/details/118486461(3.2.2 和 3.2.3)
# /etc/hosts里添加
# GitHub Start
52.74.223.119 github.com
192.30.253.119 gist.github.com
54.169.195.247 api.github.com
185.199.111.153 assets-cdn.github.com
151.101.76.133 raw.githubusercontent.com
151.101.108.133 user-images.githubusercontent.com
151.101.76.133 gist.githubusercontent.com
151.101.76.133 cloud.githubusercontent.com
151.101.76.133 camo.githubusercontent.com
151.101.76.133 avatars0.githubusercontent.com
151.101.76.133 avatars1.githubusercontent.com
151.101.76.133 avatars2.githubusercontent.com
151.101.76.133 avatars3.githubusercontent.com
151.101.76.133 avatars4.githubusercontent.com
151.101.76.133 avatars5.githubusercontent.com
151.101.76.133 avatars6.githubusercontent.com
151.101.76.133 avatars7.githubusercontent.com
151.101.76.133 avatars8.githubusercontent.com
# GitHub End
# 报错的时候可能需要去除kubeedge.json
# 开另外一个终端
kubectl proxy
# 在原来终端
kubectl get ns kubeedge -o json > kubeedge.json # 修改finalize
curl -k -H "Content-Type: application/json" -X PUT --data-binary @kubeedge.json http://127.0.0.1:8001/api/v1/namespaces/kubeedge/finalize
keadm gettoken
https://blog.csdn.net/yinjl123456/article/details/119065682
#查看cloudcore启动情况
ps aux|grep cloudcore
#输出如下表示启动:
root 23498 0.1 0.3 1012544 48640 ? Ssl May12 13:11 /usr/local/bin/cloudcore
#查看端口 10000 10002 端口都有了
#没有netstat命令,安装:yum install net-tools -y
netstat -tpnl
#如下:
tcp6 0 0 :::10000 :::* LISTEN 23498/cloudcore
tcp6 0 0 :::10002 :::* LISTEN 23498/cloudcore
#查看cloudcore启动状态
systemctl status cloudcore
#如果没有设置开机启动服务则设置 复制开启自启动服务文件
cp /etc/kubeedge/cloudcore.service /etc/systemd/system/cloudcore.service
#添加文件权限
chmod +x /etc/systemd/system/cloudcore.service
#重新加载配置文件
systemctl daemon-reload
#查看cloudcore启动的进程id,然后杀掉
ps aux|grep cloudcore
#输出如下:
root 23498 0.1 0.3 1012544 48640 ? Ssl May12 13:12 /usr/local/bin/cloudcore
#杀掉
kill -9 23498
#启动cloudcore
systemctl start cloudcore
#设置开机自启动
systemctl enable cloudcore.service
#查看cloudcore开机启动状态 enabled:开启, disabled:关闭
systemctl is-enabled cloudcore.service
#重新启动cloudcore
systemctl restart cloudcore
# 下载文件 解压Go包
wget https://golang.google.cn/dl/go1.17.linux-amd64.tar.gz
tar -zxf go1.17.linux-amd64.tar.gz -C /usr/local
# 配置环境变量
vim /etc/profile
#golang config
export GOROOT=/usr/local/go
export GOPATH=/data/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
# 将变量配置生效
source /etc/profile
go version
wget https://github.com/kubeedge/kubeedge/releases/download/v1.21.1/keadm-v1.21.1-linux-amd64.tar.gz #下载keadm
tar -zxvf keadm-v1.21.1-linux-amd64.tar.gz # 解压keadm的tar.gz的包
cd keadm-v1.21.1-linux-amd64/keadm/
cp keadm /usr/sbin/ #将其配置进入环境变量,方便使用
./keadm join --cloudcore-ipport=192.168.240.100:10000 --edgenode-name=edge --kubeedge-version=1.13.0 --token=<上面keadm gettoken里面的返回内容>
# 边缘节点join时报错后,需要将service,证书,kubeedge/config等相关文件删除后重新join
# 一定要在keadm文件夹下
./keadm reset
# https://blog.csdn.net/weixin_38159695/article/details/118486461
3.2.2 3.5
host文件github第一行删除
# Get ImageStatus from image service failed" err="rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.ImageService" image="kubeedge/installation-package:v1.13.0"
# 解决方案:or you could set -r parameter to use docker as your runtime when keadm join
# 查看edgecore的日志
journalctl -u edgecore.service -xe
# Aug 12 22:29:23 k8s-edge01 edgecore[1407]: E0812 22:29:23.433701 1407 edged.go:264] init new edged error, misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"
# 说明需要把docker的驱动改为cgroupfs
vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=cgroupfs"]
}
# 重启docker,然后查看
systemctl daemon-reload
systemctl restart docker
# F1209 10:30:52.247227 49180 certmanager.go:92] Error: failed to get edge certificate from the cloudcore, error: Get “https://192.168.194.130:30002/edge.crt”: x509: certificate is valid for 10.233.70.40, not 192.168.194.130
# CloudCore安装时配置的advertise-address,为逗号分隔的多个地址,需要提前规划好
vim /etc/kubeedge/config/edgecore.yaml
# 清理证书
kubectl delete secret casecret cloudcoresecret -n kubeedge
#重新启动cloudcore
systemctl restart cloudcore
# 边缘节点重新join
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.11.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
将可执行权限应用于二进制文件
sudo chmod +x /usr/local/bin/docker-compose
创建软链
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试是否安装成功
docker-compose version
# 下载完改成docker-compose.yml 即可
wget https://raw.githubusercontent.com/edgexfoundry/developer-scripts/master/releases/edinburgh/compose-files/docker-compose-edinburgh-1.0.1.yml
docker-compose pull
docker-compose up -d
docker-compose ps
http://192.168.0.86:4000/#/dashboard # ui界面
http://192.168.0.86:59880/api/v2/event/device/name/Random-Integer-Device (core-data)
http://192.168.0.86:59882/api/v2/device/all (core- command)
http://192.168.0.86:59881/api/v2/deviceprofile/all (core-meta)