首页 运维

使用kubeadm安装kubernetes

发布于: 2024-04-27

永久修改主机名

1
hostnamectl set-hostname k8s-master

禁用swap

临时修改,重启后恢复

1
swapoff -a

永久修改

编辑配置文件 /etc/fstab 将swap进行注释

查看是否生效

使用free -g命令,Swap 显示都为0表示修改成功了

安装docker

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
root@k8s-master:~# apt install -y docker.io
root@k8s-master:~# docker version
Client:
Version: 20.10.21
API version: 1.41
Go version: go1.18.1
Git commit: 20.10.21-0ubuntu1~18.04.3
Built: Thu Apr 27 05:50:21 2023
OS/Arch: linux/amd64
Context: default
Experimental: true

Server:
Engine:
Version: 20.10.21
API version: 1.41 (minimum version 1.12)
Go version: go1.18.1
Git commit: 20.10.21-0ubuntu1~18.04.3
Built: Thu Apr 27 05:36:22 2023
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.12-0ubuntu1~18.04.1
GitCommit:
runc:
Version: 1.1.4-0ubuntu1~18.04.2
GitCommit:
docker-init:
Version: 0.19.0
GitCommit:

修改/etc/docker/daemon.json

1
2
3
4
5
6
7
8
9
10
11
root@k8s-master:~# cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors":[
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
],
"exec-opts":[
"native.cgroupdriver=systemd"
]
}
EOF

重启docker

1
2
systemctl daemon-reload
systemctl restart docker

必要组建安装

1
2
//从远程重新下载进行安装
sudo sh install install_ubuntu_online.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/bin/sh
# https://v1-23.docs.kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

# 指定文件包路径
K8S_PKG=${PWD}/pkg
# 可执行文件路径
DOWNLOAD_DIR=/usr/local/bin
# cni可执行文件安装目录
CNI_BIN_DIR=/opt/cni/bin
ARCH="amd64"

# 安装必要的组建
sudo apt update
sudo apt install -y conntrack ebtables ntpdate socat

# 允许 iptables 检查桥接流量
sudo cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

# 允许 iptables 检查桥接流量
sudo cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

# 时间同步
sudo ntpdate time.windows.com

# 安装CNI插件
CNI_VERSION="v0.8.2"
sudo mkdir -p $CNI_BIN_DIR
sudo curl -L "https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-linux-${ARCH}-${CNI_VERSION}.tgz" | sudo tar -C /opt/cni/bin -xz

# 安装crictl
CRICTL_VERSION="v1.22.0"
sudo curl -L "https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-${ARCH}.tar.gz" | sudo tar -C $DOWNLOAD_DIR -xz

RELEASE="v1.23.9"
# ELEASE="$(curl -sSL https://dl.k8s.io/release/stable.txt)"
cd $DOWNLOAD_DIR && sudo curl -L --remote-name-all https://storage.googleapis.com/kubernetes-release/release/${RELEASE}/bin/linux/${ARCH}/{kubeadm,kubelet,kubectl}

sudo chmod +x kubeadm kubectl kubelet

RELEASE_VERSION="v0.4.0"
sudo curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /etc/systemd/system/kubelet.service
sudo mkdir -p /etc/systemd/system/kubelet.service.d
sudo curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

# 设置kubelet开启自动自动
sudo systemctl enable --now kubelet

加载配置文件启动一个集群

启动方式1

1
2
3
//指定配置项启动
root@k8s-master:~# kubeadm init --apiserver-advertise-address=0.0.0.0 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version 1.23.0 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=all

启动方式2

1
2
3
4
5
// 获取内网重新生成kubeadm-init.yaml
root@k8s-master:~# cat kubeadm-init-default.yaml | sed "s/advertiseAddress:.*/advertiseAddress: $(ip addr show eth0 |grep "inet "|awk '{print $2}' | cut -d/ -f1)/" > kubeadm-init.yaml

//加载配置文件进行启动
root@k8s-master:~# kubeadm init --config kubeadm-init.yaml

配置信息

生成默认的配置信息 kube-init.yaml

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

然后进行按照需求进行修改成以下的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
#节点访问地址
advertiseAddress: 192.168.1.20
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
imagePullPolicy: IfNotPresent
# 节点的名字
name: k8s-master
taints: null
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
#etcd访问地址
extraArgs:
listen-client-urls: "https://127.0.0.1:2379,https://127.0.0.1:2379"
listen-peer-urls: "https://127.0.0.1:2380"
# 镜像拉去代理地址
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
# k8s版本
kubernetesVersion: 1.23.0
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
podSubnet: 10.244.0.0/16
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
clusterCIDR: "10.244.0.0/16"
# 启用 ipvs 模式
mode: "ipvs"

配置文件写入到$HOME下

1
2
3
4
root@k8s-master:~# mkdir -p $HOME/.kube
root@k8s-master:~# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
root@k8s-master:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config
root@k8s-master:~# export KUBECONFIG=/etc/kubernetes/admin.conf

安装网络组建

1
2
3
4
//安装本地
root@k8s-master:~# kubectl apply -f k8s/kube-flannel.yml
//安装远程
root@k8s-master:~# kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

检查master节点是否安装成功

1
2
3
4
5
6
7
8
9
10
11
12
13
root@k8s-master:~# kubectl get node 
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 13m v1.23.9

root@k8s-master:~# kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-6d8c4cb4d-d85pk 1/1 Running 0 36m
kube-system coredns-6d8c4cb4d-ddp9k 1/1 Running 0 36m
kube-system etcd-k8s-master 1/1 Running 9 36m
kube-system kube-apiserver-k8s-master 1/1 Running 8 36m
kube-system kube-controller-manager-k8s-master 1/1 Running 10 36m
kube-system kube-proxy-h4xnv 1/1 Running 0 36m
kube-system kube-scheduler-k8s-master 1/1 Running 11 36m