1. yum源的配置

配置阿里云的域名源即可,将以下内容写入到一个kubernetes.repo文件里,将文件拷入到/etc/yum.repos.d目录下

[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

然后执行命令安装

yum install kubelet kubeadm kubectl 

2. 操作系统的配置

1. 关闭swaf

执行命令 swapoff -a

2. sysctl的配置

将以下内容写入/etc/sysctl.d/k8s.conf文件里

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

 执行命令 sysctl -p --system 生效

3. 部署主节点

1. 生成默认配置

kubeadm config print init-defaults > init.default.yaml

生成文件内容如下,其中需要修改两个地方:

1. advertiseAddress,修改成本地服务器的地址

2. imageRepository: 默认的k8s.gcr.io我们可能访问不了,可以改成aiotceo,但问题是,这个仓库下面的个别镜像tag不对,需要手动下载。

apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.18.131
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: node
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: aiotceo
kind: ClusterConfiguration
kubernetesVersion: 1.21.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
scheduler: {}
 

2. 下载镜像

运行命令,可以看到所有需要的镜像 

[root@controller1 k8s]# kubeadm config images list --config=init.default.yaml
aiotceo/kube-apiserver:v1.21.0
aiotceo/kube-controller-manager:v1.21.0
aiotceo/kube-scheduler:v1.21.0
aiotceo/kube-proxy:v1.21.0
aiotceo/pause:3.4.1
aiotceo/etcd:3.4.13-0
aiotceo/coredns/coredns:v1.8.0

其中etcd和coredns的标签不太对,aiotceo下面的是版本后后面带操作系统,可以到https://registry.hub.docker.com/ 搜索手动拉到本地,然后用docker tag 命令添加需要的tag

3. 初始化集群

运行命令

kubeadm init --config=init.default.yaml

中间可能会失败,执行docker ps -a命令可以看到哪个容器没起来

[root@controller1 k8s]# docker ps -a
CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS                      PORTS     NAMES
500c17bc3004   446313b42c1c          "etcd --advertise-cl…"   20 seconds ago   Exited (1) 19 seconds ago             k8s_etcd_etcd-node_kube-system_bc75c7f371883450513c849                                                                  b6e013d1e_1
20a0ebba54b5   446313b42c1c          "etcd --advertise-cl…"   26 seconds ago   Exited (1) 26 seconds ago             k8s_etcd_etcd-node_kube-system_95d8ffdf2631bd6345e02a6                                                                  d56cca69a_0
31e8c749dfab   aiotceo/pause:3.4.1   "/pause"                 27 seconds ago   Up 26 seconds                         k8s_POD_etcd-node_kube-system_bc75c7f371883450513c849b                                                                  6e013d1e_0
bfec3f92301b   aiotceo/pause:3.4.1   "/pause"                 27 seconds ago   Up 26 seconds                         k8s_POD_etcd-node_kube-system_95d8ffdf2631bd6345e02a6d                                                                  56cca69a_0
80b6d582222b   4d217480042e          "kube-apiserver --ad…"   44 seconds ago   Exited (1) 21 seconds ago             k8s_kube-apiserver_kube-apiserver-node_kube-system_4f2                                                                  777b5938b8de959cca47edcb7c913_4
26196e0dda17   446313b42c1c          "etcd --advertise-cl…"   48 seconds ago   Exited (1) 48 seconds ago             k8s_etcd_etcd-node_kube-system_22b1210e9b525ff4bb5da4b                                                                  eb32a91ad_5
5b036a662eba   62ad3129eca8          "kube-scheduler --au…"   3 minutes ago    Up 3 minutes                          k8s_kube-scheduler_kube-scheduler-node_kube-system_143                                                                  dbd1794d8d0c0261dce422288da10_0
3756c0015375   09708983cc37          "kube-controller-man…"   3 minutes ago    Up 3 minutes                          k8s_kube-controller-manager_kube-controller-manager-no                                                                  de_kube-system_3fdb374bc36639b3ac2af7df25782d98_0
a4eda7cba952   aiotceo/pause:3.4.1   "/pause"                 3 minutes ago    Up 3 minutes                          k8s_POD_kube-scheduler-node_kube-system_143dbd1794d8d0                                                                  c0261dce422288da10_0
da7cf7300e93   aiotceo/pause:3.4.1   "/pause"                 3 minutes ago    Up 3 minutes                          k8s_POD_kube-controller-manager-node_kube-system_3fdb3                                                                  74bc36639b3ac2af7df25782d98_0
e2ce695fc986   aiotceo/pause:3.4.1   "/pause"                 3 minutes ago    Up 3 minutes                          k8s_POD_kube-apiserver-node_kube-system_4f2777b5938b8d                                                                  e959cca47edcb7c913_0
70991fb2e1fe   aiotceo/pause:3.4.1   "/pause"                 3 minutes ago    Up 3 minutes                          k8s_POD_etcd-node_kube-system_22b1210e9b525ff4bb5da4be                                                                  

然后可以查看容器的日志来定位问题。

我遇到的一个问题是etcd的配置问题,参考天翼云服务器部署 k8s etcdmain: listen tcp xx.xx.xx.xx:2380: bind: cannot assign requested address_aaa~#的博客-CSDN博客

这篇文章的解决办法,我写了个shell脚本来监控,当etcd的配置文件被生成后马上替换掉。

while true;
do
    sleep 0.1
    if [ -f  /etc/kubernetes/manifests/etcd.yaml ];
    then
        rm -f /etc/kubernetes/manifests/etcd.yaml && cp -f ./etcd.yaml /etc/kubernetes/manifests/etcd.yaml
        break
    fi
done

后面就部署成功了,出现下面的消息,说明部署成功

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.18.131:6443 --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:3462818de1dfaddac0d66ca07aee31a52e5a60e0482575e26110364e0823527f

4. 工作节点加入

首先,在服务器上安装bubelet kubeadm,关闭swap并且通过sysctl配置内核参数

然后如上一步安装成功后的提示,执行命令即可加入。

5. 参考

《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第4版)》

天翼云服务器部署 k8s etcdmain: listen tcp xx.xx.xx.xx:2380: bind: cannot assign requested address_aaa~#的博客-CSDN博客

Logo

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

更多推荐