环境配置:
关闭防火墙和交换内存
systemctl stop ufw
sudo swapoff -a
安装Docker
更新安装包
sudo apt-get update
安装依赖
sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
获取证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
添加仓库
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
再次更新安装包
sudo apt update
安装docker
sudo apt-get -y install docker-ce
启动docker
sudo systemctl start docker
重启docker
sudo systemctl restart docker
开机自启docker
sudo systemctl enable docker
kubelet、kubectl、kubeadm组件安装
更新安装包
sudo apt-get update
签名秘钥
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
添加k8s的apt仓库
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"
再次更新apt包
sudo apt-get update
查看版本是否存在
sudo apt-cache madison kubelet kubectl kubeadm | grep '1.22.9-00'
指定版本安装
sudo apt install -y kubelet=1.22.9-00 kubectl=1.22.9-00 kubeadm=1.22.9-00
标记指定软件包为保留,阻止更新
sudo apt-mark hold kubelet kubeadm kubectl
修改cgroups
在/etc/docker/daemon.json文件中添加exec-opts参数
{ "exec-opts":[ "native.cgroupdriver=systemd" ] }
重启docker
systemctl restart docker
重启kubelet
systemctl restart kubelet
初始化
初始化命令
sudo kubeadm init \ --kubernetes-version=v1.22.9 \ --image-repository registry.aliyuncs.com/google_containers \ --pod-network-cidr=10.24.0.0/16 \ --ignore-preflight-errors=Swap
--image-repository string 指定从什么位置来拉取镜像(1.13版本才有的)
默认值是k8s.gcr.io,改为国内镜像地址:registry.aliyuncs.com/google_containers
–kubernetes-version string: 指定kubenets版本号
–pod-network-cidr 指定 Pod 网络的范围。
Kubernetes 支持多种网络方案,而且不同网络方案对 –pod-network-cidr有自己的要求,这里设置为10.244.0.0/16 是因为我们将使用 flannel 网络方案,必须设置成这个 CIDR。(说明在集群中将会使用10.244.0.0这个网段下面的所有ip地址,比如将tomcat部署在10.244.144.198这个地址,然后再master节点使用curl 10.244.144.198就可以返回tomcat的界面)
--ignore-preflight-errors=all 忽略预检报错内容,指定所有(自己猜的)
注:kubeadm 不支持将没有 --control-plane-endpoint 参数的单个控制平面集群转换为高可用性集群。创建.kube文件夹
sudo mkdir -p $HOME/.kube
将admin.conf文件内容复制到.kube的config文件中
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
将文件的所有权限从文件所有者修改到到所有者所在的组的其他用户(user->group)
sudo chown $(id -u):$(id -g) $HOME/.kube/config
如果使用kubectl报错,/etc/kubernetes/admin.conf访问拒绝,使用sudo chown $(id -u):$(id -g) /etc/kubernetes/admin.conf
calico网络配置
获取calico.yaml文件资源
curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml -O
应用到kubectl中
sudo kubectl apply -f calico.yaml
如果出现localhost:8080访问出错,把sudo去掉
查看节点和组件
查看集群中节点信息
kubectl get nodes
查看组件状态
kubectl get cs
如果组件为unhealthy,原因是默认端口是0了,需要注释掉
/etc/kubernetes/manifests
下的kube-controller-manager.yaml
和kube-scheduler.yaml
的--port=0或直接删除--port=0
注释完重启sudo systemctl restart kubelet.service
创建pod
将主节点设为可调度
kubectl taint nodes --all node-role.kubernetes.io/master-
当创建单机版的 k8s 时,master 节点默认不允许调度 pod 。
拉取镜像
kubectl run nginx --image=nginx --port=80
查看pod状态
kubectl get pod
删除pod
kubectl delete pods nginx --grace-period=0 --force
强制删除
kubectl delete pods nginx
普通删除
woker节点加入master节点的命令
kubeadm token create --print-join-command
在master节点上运行,得到相应命令