安装
我们只是搭建一个 mini 的类似于真实的 kubernetes 环境,用来自己学习,我们也可以选择安装 minikube
安装前的准备工作
-
修改 hostname,因为 kubernetes 使用 hostname 来区分集群
sudo vim /etc/hostname
-
使用 docker 作为容器运行时,kubernetes 支持多种容器运行时,使用 docker 比较方便。
cat <<EOF | sudo tee /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF sudo systemctl enable docker sudo systemctl daemon-reload sudo systemctl restart docker
-
修改 iptables 的配置,启用"br_netfilter"
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward=1 # better than modify /etc/sysctl.conf EOF sudo sysctl --system
-
修改 /etc/fstab,关闭 Linux Swap 分区,提升 kubernetes 的性能
sudo swapoff -a sudo sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab
安装 kubeadm
以 ubuntu 系统为例
sudo apt install -y apt-transport-https ca-certificates curl
#Ubuntu 22.04 LTS以前的版本使用这个命令
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
#Ubuntu 22.04 LTS及其以后的版本使用这个命令添加镜像源
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
#安装指定的版本,也可以不指定,默认安装最新版
sudo apt install -y kubeadm=1.27.3-00 kubelet=1.27.3-00 kubectl=1.27.3-00
#最好锁定版本
sudo apt-mark hold kubeadm kubelet kubectl
#使用如下的命令验证安装情况
kubeadm version
kubectl version --client
下载 Kubernetes 组件镜像
为了加快集群的部署速度,可以先下载镜像。 从 Google 下载镜像需要魔法,可以使用国内的镜像站,例如阿里云的镜像
repo=registry.aliyuncs.com/google_containers
for name in `kubeadm config images list --kubernetes-version v1.27.3`; do
src_name=${name#k8s.gcr.io/}
src_name=${src_name#coredns/}
docker pull $repo/$src_name
docker tag $repo/$src_name $name
docker rmi $repo/$src_name
done
也可以使用代理工具
sudo systemctl set-environment HTTP_PROXY=127.0.0.1:1080
sudo systemctl set-environment HTTPS_PROXY=127.0.0.1:1080
# 注意,如果设置了proxy,一定要把本机的ip的地址中加入到NO_PROXY
sudo systemctl set-environment NO_PROXY=127.0.0.1,localhost,master,192.168.31.159
sudo systemctl show-environment #查看已经配置的环境变量
sudo systemctl restart containerd.service
sudo kubeadm config images pull
安装 master 节点
kubeadm init --apiserver-advertise-address=192.168.31.159 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.27.3 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
遇到的问题
container runtime is not running:
需要修改 /etc/containerd/config.toml 配置文件,查看 cri 插件是否被禁用
6443 端口没有监听,是因为用的 containerd 作为容器运行时,这个需要单独配置
默认 kubeadm 使用的是 systemd 作为驱动,所以 containerd 也要配置 Systemd。
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] ... [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true
注意,如果是发行版自带的 containerd,可能默认的配置文件,不是这样的,可以使用
containerd config default > /etc/containerd/config.toml
获取默认的配置文件,然后再做修改
安装成功会有如下的提示,根据提示操作即可
#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.31.159:6443 --token e9uygt.cl9w56si9xje59tt \
--discovery-token-ca-cert-hash sha256:1852654cb71afc09f5c7ff1895e10a79bc283255d160ffaae21e53c5736c7316
tips
查看日志 journalctl -xe -f /usr/bin/kubelet
运行 kubeadm reset 之后要删除 $HOME/.kube 目录
安装网络组件
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
参考
https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/