系统与服务版本必须保持一致,否则,需要改动其他,本案例多次验证有效!!!
主机角色 | IP | 版本号 |
---|---|---|
master-1 | 192.168.171.100 | kubelet1.14.6-00 kubeadm1.14.6-00 kubectl1.14.6-00 |
node-1 | 192.168.171.200 | |
node-2 | 192.168.171.201 |
1、关闭系统swap ;
sudo swapoff -a
sudo sed -i ‘/swap/ s/^/#/’ /etc/fstab
sudo vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #开启ipv4转发,允许内置路由
sudo sysctl -p # 立即生效
3、配置集群无密登录 master到node-1,node-2无密码
ssh-keygen -t rsa
ssh-copy-id root@node-1
ssh-copy-id root@node-2
#配置镜像加速,登陆阿里云个人账号,获取加速镜像地址:手动或执行脚本自动,vim /etc/docker/daemon.json
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://877qt60u.mirror.aliyuncs.com"]
> }
> EOF
提示:我们一会安装各个组件需要用到https、curl工具
sudo apt-get update && apt-get install -y apt-transport-https
sudo apt-get install curl
安装GPG证书
sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
使用国内kubernetes的源(阿里源)
sudo tee /etc/apt/sources.list.d/kubernetes.list <<-‘EOF’
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
EOF
更新软件源(使更改后的源生效)
sudo apt-get update
提示:需要做些优化,否则,重启之后,或过短时间,发现打开报错!
各组件作用:
kubeadm:引导集群的命令。
kubelet:在集群中的所有机器上运行的组件,并执行诸如启动 pod 和容器之类的操作。
kubectl:与您的集群对话的命令行工具。
安装指定版本:
sudo apt-get install -y kubelet=1.14.6-00 kubeadm=1.14.6-00 kubectl=1.14.6-00
保持版本,取消自动更新
sudo apt-mark hold kubelet=1.14.6-00 kubeadm=1.14.6-00 kubectl=1.14.6-00
kubelet 修改与docker 驱动一致
docker info # 查看驱动(默认的是cgroupfs,如果跟Docker 一致就不需要修改。)
sudo vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
在KUBELET_KUBECONFIG_ARGS 后面追加 --cgroup-driver=cgroupfs
启动或重启kubelet
sudo systemctl daemon-reload
sudo systemctl restart kubelet
查看kubernetes 1.14.6需要哪些镜像:
kubeadm config images list --kubernetes-version=v1.14.6
k8s.gcr.io/kube-apiserver:v1.14.6
k8s.gcr.io/kube-controller-manager:v1.14.6
k8s.gcr.io/kube-scheduler:v1.14.6
k8s.gcr.io/kube-proxy:v1.14.6
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1
//初始化k8s集群,192的地址就是master的地址根据自己情况进行修改,cidr和pod必须配置否则没有网络插件后面的node不能加入
执行初始化命令:
kubeadm init \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.14.6 \
--apiserver-advertise-address=192.168.171.100 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
apiserver-advertise-address=192.168.171.100 这个参数就是master主机的IP地址。其他默认就行。
apiserver-advertise-address 用哪个IP(网口)提供api, 可以用当前主机的IP, 或者0.0.0.0不指定
pod-network-cidr Pod层的网络IP范围, 需要与后面要配置的kube-flannel.yml里的设置一致
service-cidr Service层的网络IP范围, 这个是虚拟IP不会体现在路由表上, 与前面的IP区分开就行
成功后提示:
添加网络插件:这步保证集群之间通讯
在其中一台执行,拷贝到另一台:
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
特别注意:执行后面的命令,在master能成功,节点执行报错如下:
节点kubectl启动不了,需要依赖 /etc/kubernetes/下的admin.conf文件,但只有master主节点经过初始化才能生成该文件。
解决方法:在节点创建目录,将master节点的admin.conf复制到node节点对应目录下,并赋予权限。
mkdir -p $HOME/.kube # 分别在子节点执行
scp /etc/kubernetes/admin.conf root@node-1:$HOME/.kube/config
scp /etc/kubernetes/admin.conf root@node-2:$HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config # 分别在节点上执行
节点加入集群报错
解决方案:
1)翻译:[飞行前]运行飞行前检查
[警告:检测到“cgroupfs”作为Docker cgroup驱动程序。推荐的驱动程序是“systemd”。请跟随https://kubernetes.io/docs/setup/cri/的导游,错误执行阶段预检:无法验证应用编程接口服务器的身份:需要32字节的SHA-256哈希,找到28字节
2)提取关键信息:需要32字节的SHA-256哈希,找到28字节
3)身份标识符位数不对,我是复制master节点,为什么会这样?原来,- -discovery前面不要有空格,复制的格式不对导致,改正之后呢?学会防患与未然,下次,遇到类似的情况,复制粘贴之后检查格式再回车,负责报错很难确定是哪个方面引起的!改成下面的成功!