Long time no see,很久没有写文章了,之前搞k8s一直想写的,就一直拖,所以今天来更新一下K8s主从节点的搭建。方便之后忘记了,记忆力真的不太好了。哈哈。
当然安装k8s的方式有很多,我选择的是 Kubeadm ,之前用过其他方式安装过老版本的k8s,感觉不方便就不写出来了。
硬件准备:
- 两台大于2g内存的服务器或虚拟机。
首先我们准备两台虚拟机,内存需要大于2g,不然会安装失败的。
准备好后就可以开始我们的安装工作了。
第一步:
我们需要关闭防火墙,SeLinux,以及swap:
- 关闭防火墙是为了暴露K8s需要用到的端口
- SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。所以避免k8s进程受到管制导致未知的问题所以关闭它。
- swap,指的是一个交换分区或文件。关闭swap主要是为了性能考虑。
关闭防火墙:
systemctl stop firewalld 停止防火墙
systemctl disable firewalld 开机不启动防火墙
systemctl status firewalld 查看防火墙状态是否关闭
关闭SELinux:
setenforce 0 临时禁用
永久禁用:
vi /etc/selinux/config
SELINUX=disabled
关闭swap:
swapoff -a 临时关闭
第二步:
修改k8s.conf文件:
cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system
第三步:
安装docker:
1、假如之前有安装过docker可以先卸载掉之前的docker以及依赖:
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
2、安装必须的包。yum-utils
提供了yum-config-manager
实用程序,并且device-mapper-persistent-data
和lvm2
需要devicemapper
存储驱动程序:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3、使用以下命令设置稳定存储库。 您始终需要稳定的存储库,即使您也想从边缘或测试存储库安装构建:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
4、查看docker版本列表确定你需要安装的是什么版本:
yum list docker-ce --showduplicates | sort -r
5、选择你需要的docker版本,一般选择稳定的版本:
sudo yum install docker-ce-18.06.3.ce
6:、安装成功后,开启docker:
systemctl start docker 开启docker
systemctl status docker 查看docker版本
然后docker安装就成功了。
第四步:
可以开始k8s的安装了。这里可以先修改一下主机名 :
hostnamectl set-hostname k8s-master 名字可以随意定,表示大致意思就可以了。
首先修改安装源(下载会快很多)
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
然后开始安装:
yum install -y kubelet-1.16.3-0 kubeadm-1.16.3-0 kubectl-1.16.3-0
systemctl enable kubelet
systemctl start kubelet 这里注意kubelet是起不来的,在master节点初始化之前是无法启动的
接着初始化master节点(注意这里以后的步骤子节点不需安装):
kubeadm init --kubernetes-version=1.16.3 --apiserver-advertise-address=192.168.31.150 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16
解释: –kubernetes-version: 用于指定k8s版本; –apiserver-advertise-address:用于指定kube-apiserver监听的ip地址,就是 master本机IP地址。 –pod-network-cidr:用于指定Pod的网络范围; 10.244.0.0/16 –service-cidr:用于指定SVC的网络范围; –image-repository: 指定阿里云镜像仓库地址
这里指定阿里云镜像仓库是因为国外的无法访问。这里还需要注意的是等待的时间比较久,大约在4、5分钟左右。之后看到:
Your Kubernetes control-plane has initialized successfully!
这样就成功了,继续下一步:
配置kubectl工具,以供我们使用(后面子节点也需要用到):
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
安装calico(Calico是一个纯三层的协议,为OpenStack虚机和Docker容器提供多主机间通信):
mkdir k8s cd k8s wget https://docs.projectcalico.org/v3.10/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml ## 将192.168.0.0/16修改ip地址为10.244.0.0/16 sed -i 's/192.168.0.0/10.244.0.0/g' calico.yaml
kubectl apply -f calico.yaml
这里如果wget下载不下来就用http代替https:
http://docs.projectcalico.org/v3.10/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
最后在设置kubelet开机启动就可以了,我们主节点就算安装成功了:
systemctl enable kubelet
第五步:
子节点初始化,可以先改个主机名:
hostnamectl set-hostname k8s-node1 名字可以随意定,表示大致意思就可以了。
然后和上面一样,需要关闭防火墙等,安装docker,安装k8s,直到初始化master上面的步骤,这个时候我们就可以把根节点加入到主节点中了。
重点:首先我们要把master机器上的token获取下来:
kubeadm token list
然后找到证书:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt |openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex |sed 's/^.* //'
然后就可以加入master了:
kubeadm join 192.168.202.131:6443 --token f9vc9q.czjexxx
--discovery-token-ca-cert-hash sha256:9b48669c620fcxxxx2a0cfa842f8c3950690f43a5d552a7cefef37d1fa31
刚刚获取的token放在--token之后,注意空格。获取的证书放sha256:之后就可以了。
假如还是无法加入,那可能是token过期了,重新生成一个token就行了:
kubeadm token create
加入成功之后,我们设置开机启动:
systemctl enable kubelet
然后在主节点机器上获取nodes发现我们的子节点是not ready的情况,这个问题卡了有点久,我们查看一下主节点的pod情况:
kubectl get pods -n kube-system
发现calico-node其中一个pod没有跑起来:
然后查看这个pod的描述:
kubectl describe po calico-node-m6442
发现事件中有报错,节点没有拉取下来这个镜像:
然后我们在节点机器拉取下来就可以咯:
docker pull calico/node:v3.10.3
等几分钟就发现node状态是ready了。这个时候我们可以在子节点机器查看一下节点:
kubectl get nodes
此时又发现错误:The connection to the server localhost:8080 was refused - did you specify the right host or port?
需要在节点机器/root下新建一个目录 .kube:
mkdir /root/.kube
cd /root/.kube
然后新建一个文件config,将master节点中/root/.kube/config 文件下的内容复制到节点中config文件中。内容如下:
然后重新执行一下:
这里发现节点node1的角色是none,这个时候需要设置一下节点node1的角色:
kubectl label node k8s-node1 node-role.kubernetes.io/node=node
然后节点的角色变成node了,那么主从节点的安装就大公告成了。
借鉴博客:http://www.cnblogs.com/stulzq/p/7743073.html , https://www.cnblogs.com/xiao987334176/p/11899321.html
感谢上面的博主的文章。
作者具有所有权,未经作者同意禁止转载。