环境一、安装docker
1.获取docker版本列表2.安装并优化配置 二、部署k8s
1.安装依赖2.安装k8s组件及优化 三、初始化集群四、排错思路
环境
系统与服务版本必须保持一致,否则,需要改动其他,本案例多次验证有效!!!
1、关闭系统swap ;
sudo swapoff -a
sudo sed -i ‘/swap/ s/^/#/’ /etc/fstab
验证:
2、开启内核ipv4转发开启
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
一、安装docker 1.获取docker版本列表 2.安装并优化配置
1)安装
2)优化
#配置镜像加速,登陆阿里云个人账号,获取加速镜像地址:手动或执行脚本自动,vim /etc/docker/daemon.json
sudo mkdir -p /etc/dockersudo 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
2.安装k8s组件及优化提示:需要做些优化,否则,重启之后,或过短时间,发现打开报错!
各组件作用:
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/configscp /etc/kubernetes/admin.conf root@node-2:$HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config # 分别在节点上执行
验证:
节点正常
master与node详细信息:
节点加入集群报错
解决方案:
1)翻译:[飞行前]运行飞行前检查
[警告:检测到“cgroupfs”作为Docker cgroup驱动程序。推荐的驱动程序是“systemd”。请跟随https://kubernetes.io/docs/setup/cri/的导游,错误执行阶段预检:无法验证应用编程接口服务器的身份:需要32字节的SHA-256哈希,找到28字节
2)提取关键信息:需要32字节的SHA-256哈希,找到28字节
3)身份标识符位数不对,我是复制master节点,为什么会这样?原来,- -discovery前面不要有空格,复制的格式不对导致,改正之后呢?学会防患与未然,下次,遇到类似的情况,复制粘贴之后检查格式再回车,负责报错很难确定是哪个方面引起的!改成下面的成功!