本来打算用Rancher安装,rancher安装好了之后,在master和node节点上执行命令,一直不成功。公司网管告诉我公司网络的各种限制,也没听懂,没办法,只能自己手动安装k8s集群了。记录一下成功的过程。

机器配置

机器ip地址配置
master192.188.1.2414核、16G内存、CentOS7.8
node1192.188.1.2424核、32G内存、CentOS7.8
node2192.188.1.2434核、32G内存、CentOS7.8
node3192.188.1.2444核、32G内存、CentOS7.8

待安装的版本:

Docker:20.10.10、K8S:1.21.0

安装Docker

四台机器都要安装

1、设置稳定的安装源(存储库)

​yum install yum-utils -y
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

2、导入证书

rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7

3、安装
 

#yum list docker-ce --showduplicates | sort -r
yum install -y docker-ce-20.10.10 docker-ce-cli-20.10.10 containerd.io

4、启动

systemctl start docker
systemctl enable docker

5、验证

docker version
docker run hello-world

更改主机名

更改四台机器的名称,分别是:Master、node1、node2、node3

[root@localhost ~]# hostname node1

[root@localhost ~]# bash

[root@node1 ~]#

SSH设置

master机器上,vi /etc/hosts,添加

192.168.2.10 node1
192.168.2.20 node2
192.168.2.30 node3

生成ssh公钥,并传输到3台node节点:

[root@localhost ~]# ssh-keygen
[root@localhost ~]# ssh-copy-id -i root@node1
[root@localhost ~]# ssh-copy-id -i root@node2
[root@localhost ~]# ssh-copy-id -i root@node3

传输hosts文件到3台node节点:

[root@localhost ~]# scp /etc/hosts root@node1:/etc
[root@localhost ~]# scp /etc/hosts root@node2:/etc
[root@localhost ~]# scp /etc/hosts root@node3:/etc

环境设置

在四台机器:

swapoff –a
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

vi /etc/fstab
#将分区类型为swap的一行注释掉
/dev/mapper/centos-swap swap

yum install epel-release -y

在master机器:

将桥接的IPv4流量传递到iptables的链:

vi /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

$ sysctl --system  # 生效

在所有四台机器:

时间同步:

$ yum install ntpdate -y
$ ntpdate time.windows.com

安装K8S

在Master机器执行

yum install -y kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0
systemctl enable kubelet

kubeadm init \
  --apiserver-advertise-address=192.188.1.241 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.21.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --ignore-preflight-errors=all
  • –apiserver-advertise-address 集群master地址
  • –image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
  • –kubernetes-version K8s版本,与上面安装的一致
  • –service-cidr 集群内部虚拟网络,Pod统一访问入口
  • –pod-network-cidr Pod网络,下面部署的CNI网络组件yaml中要填入这个值

命令执行成功后,会生成kubeadm join命令。 

到3台node上执行

yum install --enablerepo="kubernetes" kubelet-1.21.0-0.x86_64 kubeadm-1.21.0-0.x86_64 kubectl-1.21.0-0.x86_64

kubeadm join 192.188.1.241:6443 --token 1qcuuj.z66au8xyztjx58m3 \
        --discovery-token-ca-cert-hash sha256:9cd5c251200e193e8c7ded71ae74e6381a0f64dc5e0bcc401591d70e8c67d1df

这儿的kubeadm命令是刚刚master机器上kubeadm init生成的。

回到master,部署容器网络(CNI)

​wget https://docs.projectcalico.org/manifests/calico.yaml

修改calico.yml文件,查找里面的CALICO_IPV4POOL_CIDR,去掉注释,将value的ip地址改为:10.244.0.0,也就是kubeadm init命令时填入的ip地址

执行命令

kubectl apply -f calico.yaml

修改配置

这时查看集群状态是:

需要等一段时间变成:

再查看pods状态,会发现有点问题:

kubectl get pods -n kube-system

因为阿里云上没有coredns这个镜像。

通过下面命令获取pod运行在哪台机器以及使用的镜像:

kubectl get pods coredns-545d6fc579-n94zl  -o wide  -n kube-system

kubectl get pods coredns-545d6fc579-n94zl -n kube-system -o yaml | grep image:

 在pod运行的node1上拉取镜像:

docker pull coredns/coredns:1.8.0

将拉取下来的镜像改tag

docker tag 296a6d5035e2 registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0

两个有问题的pod都执行以上两步,再回到master查看状态,成功!

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐