搭建k8s集群
k8s部署具体步骤sudo apt-get updatesudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common# step 2: 安装GPG证书curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg
方法一:利用官方工具kubeadm搭建
一、安装docker-ce
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
二、将docker加入docker群组,使用普通用户也可以使用docker
sudo groupadd docker #添加docker用户组<br>
sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中<br>
newgrp docker #更新用户组
三、配置Ubuntu 的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=1.21.5-00 kubeadm=1.21.5-00 kubectl=1.21.5-00
如果安装过其他版本,先删除软件及其配置文件
apt-get --purge remove kubelet
apt-get --purge remove kubectl
apt-get --purge remove kubeadm
四、查看对应的k8s安装组件版本,在阿里云下载对应镜像
kubeadm config images list
写脚本文件installks.sh,安装所需要的镜像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.5
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.5
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.5
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.5
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.4.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.5 k8s.gcr.io/kube-apiserver:v1.21.5
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.5 k8s.gcr.io/kube-controller-manager:v1.21.5
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.5 k8s.gcr.io/kube-scheduler:v1.21.5
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.5 k8s.gcr.io/kube-proxy:v1.21.5
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.4.1 k8s.gcr.io/pause:3.4.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0 k8s.gcr.io/etcd:3.4.13-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.21.5
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.21.5
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.21.5
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.21.5
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.4.1
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.0
执行脚本文件,镜像阿里云容器镜像服务的
sudo chmod -R 777 installks.sh
sudo ./installks.sh
五、设置配置文件
1.
sudo vim /etc/docker/daemon.json
在文件中添加代码段
{
"exec-opts": ["native.cgroupdriver=systemd"] #Kubernetes 推荐使用 systemd 来代替 cgroupfs
}
2.
vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
添加
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true --fail-swap-on=false"
3.
sudo vim /etc/fstab #swap那行 前面加#
保存配置
systemctl daemon-reload
systemctl restart docker
systemctl status docker
六、初始化k8s master节点
sudo kubeadm init --kubernetes-version=v1.21.5 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.96.0.0/16
出现下面提示就成功了,然后按提示操作
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 10.3.172.47:6443 --token eul8eh.jhok8q7mj6mgijun \
当初始化失败,重新初始化时,需要清理环境
kubeadm reset
sudo rm -rf /etc/cni/net.d
sudo rm -rf $HOME/.kube/config
sudo rm -rf /etc/kubernetes/
sudo rm -rf /var/lib/etcd
七、查看节点状态
scarlettzhao@scarlettzhao-master:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
scarlettzhao-master NotReady control-plane,master 100s v1.22.2
节点是notready,检查pod
scarlettzhao@scarlettzhao-master:~$ kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-78fcd69978-8ps67 0/1 Pending 0 122m
kube-system coredns-78fcd69978-ng7ln 0/1 Pending 0 122m
kube-system etcd-scarlettzhao-master 1/1 Running 2 (4m32s ago) 122m
kube-system kube-apiserver-scarlettzhao-master 1/1 Running 2 (4m31s ago) 122m
kube-system kube-controller-manager-scarlettzhao-master 1/1 Running 2 (4m32s ago) 122m
kube-system kube-flannel-ds-ntchz 0/1 Init:1/2 0 25s
kube-system kube-proxy-9mh9h 1/1 Running 1 (4m32s ago) 122m
kube-system kube-scheduler-scarlettzhao-master 1/1 Running 2 (4m32s ago) 122m
coredns 状态pending,未运行,因为缺少网络组件
八、配置网络
用calico:Project Calico
1.Install the Tigera Calico operator and custom resource definitions.
kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
2.Install Calico by creating the necessary custom resource. For more information on configuration options available in this manifest, see the installation reference.
kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml
# Note: Before creating this manifest, read its contents and make sure its settings are correct for your environment. For example, you may need to change the default IP pool CIDR to match your pod network CIDR.
3.Confirm that all of the pods are running with the following command.
watch kubectl get pods -n calico-system
#Wait until each pod has the STATUS of Running.
# Note: The Tigera operator installs resources in the calico-system namespace. Other install methods may use the kube-system namespace instead.
4.Remove the taints on the master so that you can schedule pods on it.
kubectl taint nodes --all node-role.kubernetes.io/master-
5.kubectl get nodes -o wide
九、另外:
清理docker磁盘:
docker system prune -a --volumes
查看错误日志:
journalctl -xefu kubelet
方法二:利用kubekey搭建
步骤一:
1.硬件推荐配置
操作系统 | 最低配置 |
---|---|
Ubuntu 16.04, 18.04 | 2 核 CPU,4 GB 内存,40 GB 磁盘空间 |
2.节点要求
- 节点必须能够通过
SSH
连接。 - 节点上可以使用
sudo
/curl
/openssl
命令
3.容器运行时
您的集群必须有一个可用的容器运行时。如果您使用 KubeKey 搭建集群,KubeKey 会默认安装最新版本的 Docker。或者,您也可以在创建集群前手动安装 Docker 或其他容器运行时。
支持的容器运行时 | 版本 |
---|---|
Docker | 19.3.8 + |
containerd(试验版,未经充分测试) | 最新版 |
CRI-O(试验版,未经充分测试) | 最新版 |
iSula(试验版,未经充分测试) | 最新版 |
4.依赖项要求
KubeKey 可以将 Kubernetes 和 KubeSphere 一同安装。针对不同的 Kubernetes 版本,需要安装的依赖项可能有所不同。您可以参考以下列表,查看是否需要提前在节点上安装相关的依赖项。
依赖项 | Kubernetes 版本 ≥ 1.18 | Kubernetes 版本 < 1.18 |
---|---|---|
socat | 必须 | 可选但建议 |
conntrack | 必须 | 可选但建议 |
ebtables | 可选但建议 | 可选但建议 |
ipset | 可选但建议 | 可选但建议 |
5.网络和 DNS 要求
- 请确保
/etc/resolv.conf
中的 DNS 地址可用,否则,可能会导致集群中的 DNS 出现问题。 - 如果您的网络配置使用防火墙规则或安全组,请务必确保基础设施组件可以通过特定端口相互通信。建议您关闭防火墙。有关更多信息
- 支持的 CNI 插件:Calico 和 Flannel。其他插件也适用(例如 Cilium 和 Kube-OVN 等),但请注意它们未经充分测试。
步骤二:
先执行以下命令以确保您从正确的区域下载 KubeKey。
export KKZONE=cn
执行以下命令下载 KubeKey。
curl -sfL https://get-kk.kubesphere.io | VERSION=v1.2.1 sh -
为 kk
添加可执行权限:
chmod +x kk
步骤三:
安装 Kubernetes ,可参考以下示例命令:
./kk create cluster --with-kubernetes v1.21.5
- KubeKey 会默认安装 OpenEBS 为开发和测试环境提供 LocalPV 以方便新用户
- 执行该命令后,KubeKey 将检查您的安装环境,结果显示在一张表格中。输入
yes
继续安装流程。
新节点加入到旧节点上
1.查看 master 的节点的 token :
kubeadm token list
2.没有相应的 token 的话,则创建一个:
kubeadm token create
结果:
4g6vzo.50wx29nrpbaf8bjg
3.如果没有的值--discovery-token-ca-cert-hash,则可以通过在控制平面节点上运行以下命令链来获取它
运行指令:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'
结果:
1de5d1cbf7b72263b993222acbb9dd5d25e3eddbcb346661c61581c179a0529f
最终在新的 node 节点上 运行 则会加入新的节点:
kubeadm join 10.3.172.47:6443 --token 4g6vzo.50wx29nrpbaf8bjg \
--discovery-token-ca-cert-hash sha256:1de5d1cbf7b72263b993222acbb9dd5d25e3eddbcb346661c61581c179a0529f
如果新的节点down 机需要重新的连的话,需要:
清空上次连的一些缓存内容 :
rm -rf $HOME/.kube
kubeadm reset
再进行添加节点 join 进去的
更多推荐
所有评论(0)