a安装docker
设置存储库
sudo apt update
sudo apt install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
添加官方GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
设置稳定的存储库
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
安装docker引擎
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
设置docker引擎的cgroup driver为systemd
设置 /etc/docker/daemon.json
为:
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
重启docker:
systemctl restart docker
安装k8s
关闭防火墙
ufw disable
关闭swap
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
设置主机名
hostnamectl set-hostname <hostname>
在master中添加
cat >> /etc/hosts << EOF
192.168.153.150 k8smaster
192.168.153.151 k8snode1
192.168.153.152 k8snode2
EOF
将桥接的ipv4流量传递到iptables
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system # 生效
同步时间
apt install ntpdate
# 将系统时间与网络同步
ntpdate cn.pool.ntp.org
#将时间写入硬件
hwclock --systohc
安装kubectl kubeadm kubelet
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
重启kubelet
systemctl daemon-reload
systemctl restart kubelet
部署k8s master节点
kubeadm init \
--apiserver-advertise-address=192.168.153.150 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
--apiserver-advertise-address: API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认网络接口
--image-repository: 指定阿里镜像仓库
--service-cidr: 默认值:"10.96.0.0/12",为服务的虚拟 IP 地址另外指定 IP 地址段
--pod-network-cidr: 指明 pod 网络可以使用的 IP 地址段。如果设置了这个参数,控制平面将会为每一个节点自动分配 CIDRs。
安装失败,执行以下命令,重新安装: kubeadm reset
如果是报某些镜像找不到,可以参考一下解决方案:
例如报错:
kubeadm init:failed to pull image coredns:v1.8.0: error
解决方法:
docker pull coredns/coredns:1.8.0
docker tag coredns/coredns:1.8.0 registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.0
配置运行kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
查看节点:
kubectl get nodes
加入kube node
kubeadm join 192.168.1.11:6443 --token esce21.q6hetwm8si29qxwn \
--discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5
查看token:
kubeadm token list | awk -F" " '{print $1}' |tail -n 1
查看hash:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^ .* //'
默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:
kubeadm token create --print-join-command
部署cni组件
下载文件:
curl https://docs.projectcalico.org/archive/v3.20/manifests/canal.yaml -O
安装flannel网络:
kubectl apply -f canal.yml
检查:
kubectl get pods -n kube-system