kubernetes集群 安装
基于ubuntu20.04
每个节点都要首先安装docker
apt install -y docker.io
sudo service docker start # 启动docker服务
每个节点都要配置docker的镜像源
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"registry-mirrors": [
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com"
],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
每个节点都要重新启动docker
sudo systemctl enable docker # 配置Docker为开机自启动
sudo systemctl daemon-reload # 重新加载服务的配置文件
sudo systemctl restart docker # 重启Docker
给主节点和其他节点修改主机名
# 每个节点分别设置对应主机名
hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2
为了让 Kubernetes
能够检查、转发网络流量,需要修改 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 # 手动加载所有的配置文件
每个节点都要关闭 Linux
的 swap
分区,提升 Kubernetes
的性能。
# 临时关闭
sudo swapoff -a
# 永久关闭:注释 swap 挂载,给 swap 这行开头加一下 "#" 注释
sudo sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab
每个节点都要使用阿里云镜像
sudo apt install -y apt-transport-https ca-certificates curl
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
sudo apt update
每个节点都要下载kubeadm kubectl kubelet
sudo apt install -y kubeadm=1.23.3-00 kubelet=1.23.3-00 kubectl=1.23.3-00
每个节点都要配置kubernetes为开机自启动
systemctl enable kubelet.service # 配置kubelet为开机自启动
每个节点都要锁定他们之间的版本
sudo apt-mark hold kubeadm kubelet kubectl
每个节点提前下载kubernetes需要的镜像
repo=registry.aliyuncs.com/google_containers
for name in `kubeadm config images list --kubernetes-version v1.23.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
执行脚本即可
初始化master节点,在master节点执行以下命令
kubeadm init --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
> --service-cidr=10.10.0.0/16 \
> --pod-network-cidr=10.244.0.0/16 \
> --kubernetes-version=v1.23.3
初始化成功后,会输出一个从节点加入集群的命令,等会会用到
kubeadm join 192.168.87.131:6443 --token ipacaz.exoa769a4fjzxscn \
--discovery-token-ca-cert-hash sha256:8c8ff8542a5efbbb4905aa17b7cc277456c0c64760d1fd90216e4ec881fa74b6
将kubernetes配置文件 输出到环境变量中,在master节点执行以下命令
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
配置kubernetes的网络环境,首先在每个节点执行以下命令,获取calico网络的镜像
# 从calico.yaml文件中,找到需要下载的镜像源
docker pull docker.io/calico/kube-controllers:v3.24.5
docker pull docker.io/calico/node:v3.24.5
docker pull docker.io/calico/pod2daemon-flexvol:v3.24.5
docker pull docker.io/calico/cni:v3.24.5
获取calico的yaml文件
wget https://projectcalico.docs.tigera.io/archive/v3.24/manifests/calico.yaml
在主节点上启动calico插件
kubectl apply -f calico.yaml
在从节点执行加入主节点的命令:
kubeadm join 192.168.87.131:6443 --token ipacaz.exoa769a4fjzxscn \
--discovery-token-ca-cert-hash sha256:8c8ff8542a5efbbb4905aa17b7cc277456c0c64760d1fd90216e4ec881fa74b6
然后就可以在从节点上执行 kubectl get nodes查看集群的节点情况了,但是这个时候回报错8080啥错误,需要将master节点的/etc/kubernetes/admin.conf复制到从节点的对应目录下,然后在从节点执行:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
这样就可以使用kubectl命令了。