8 24 81

K8s主从节点的搭建

    很久没有写文章了,之前搞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-datalvm2需要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

感谢上面的博主的文章。

作者具有所有权,未经作者同意禁止转载。

posted @ 2020-04-01 14:51  Ivan_Ivan  阅读(3938)  评论(0编辑  收藏  举报