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~#的博客-优快云博客
这篇文章的解决办法,我写了个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/configAlternatively, 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配置内核参数
然后如上一步安装成功后的提示,执行命令即可加入。