搭建一个kubernetes集群

安装工具kubectl

安装

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

# 查看版本 
kubectl version --client

安装 bash-completion

apt-get install bash-completion -y && source /usr/share/bash-completion/bash_completion

全局启用启动 kubectl 自动补全功能

kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null
sudo chmod a+r /etc/bash_completion.d/kubectl
source ~/.bashrc

安装集群:生产环境

安装netcat-openbsd

apt update && apt install netcat-openbsd -y

# 用于直观地看端口是否启用
root@tw:~# nc 127.0.0.1 443 -v
Connection to 127.0.0.1 443 port [tcp/https] succeeded!

安装 kubeadm

sudo apt-get update
# apt-transport-https 可能是一个虚拟包(dummy package);如果是的话,你可以跳过安装这个包
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
ip route show | grep "default via" 
default via 10.140.0.1 dev ens4 proto dhcp src 10.140.0.7 metric 100

sudo kubeadm init --pod-network-cidr=192.168.0.0/16
cat /etc/kubernetes/kubelet.conf | grep server

重置k8s集群

sudo kubeadm reset
rm -rf /etc/cni/net.d
rm -rf $HOME/.kube/config
rm -rf /etc/kubernetes
docker run -d --name=rancher --privileged --network nginx_ngu_network --memory="2g"  rancher/rancher:latest 
dd if=/dev/zero of=/swapfile bs=1M count=2048
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
 docker logs --tail 10 nginx

列出所有命名空间下的所有的服务

可以看到端口

kubectl get svc --all-namespaces
NAMESPACE                         NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
cattle-fleet-local-system         fleet-agent            ClusterIP   None             <none>        <none>                   30m
cattle-provisioning-capi-system   capi-webhook-service   ClusterIP   10.101.178.158   <none>        443/TCP                  29m
cert-manager                      cert-manager           ClusterIP   10.103.216.116   <none>        9402/TCP                 35m
cert-manager                      cert-manager-webhook   ClusterIP   10.102.68.102    <none>        443/TCP                  35m
default                           kubernetes             ClusterIP   10.96.0.1        <none>        443/TCP                  3h46m
default                           nginx-service          NodePort    10.104.63.107    <none>        80:30001/TCP             79m
kube-system                       kube-dns               ClusterIP   10.96.0.10       <none>        53/UDP,53/TCP,9153/TCP   3h46m

删除服务

kubectl delete svc nginx-service -n default
kubectl delete deployment nginx -n default
root@tw:/app/docker/nginx/nginx/conf.d# kubectl get deployments -n default
No resources found in default namespace.

删除 Namespace

kubectl get namespace cattle-system -o json
kubectl patch namespace cattle-system -p '{"metadata":{"finalizers":null}}'
kubectl get namespaces
kubectl delete all --all -n cattle-system
kubectl get all -n cattle-system
kubectl delete namespace cattle-system --force --grace-period=0


kubectl get namespace cattle-system -o json > cattle-system.json
kubectl delete validatingwebhookconfiguration rancher.cattle.io
kubectl delete validatingwebhookconfiguration cert-manager-webhook

方法一:将服务类型修改为 LoadBalancer

如果您使用的是云环境(如 GCP、AWS、Azure),可以通过将服务类型改为 LoadBalancer 来使 Rancher 获得一个外部 IP 地址。

执行以下命令来修改 Rancher 服务类型:

bash


复制代码
kubectl -n cattle-system patch svc rancher -p '{"spec":{"type":"LoadBalancer"}}'

此时,您可以通过 EXTERNAL-IP 来访问 Rancher。例如:

bash


复制代码
kubectl -n cattle-system get svc rancher

您将看到 EXTERNAL-IP 字段已分配一个外部 IP 地址,您可以使用该 IP 地址在浏览器中访问 Rancher UI。

方法二:将服务类型修改为 NodePort

如果您没有负载均衡器或不希望使用它,您可以将服务类型修改为 NodePort,然后使用集群节点的外部 IP 和端口访问 Rancher。

执行以下命令来修改 Rancher 服务类型:

bash


复制代码
kubectl -n cattle-system patch svc rancher -p '{"spec":{"type":"NodePort"}}'

然后,使用以下命令查看端口映射:

bash


复制代码
kubectl -n cattle-system get svc rancher

您将看到类似如下的输出:

scss复制代码NAME      TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
rancher   NodePort   10.104.162.113 <none>        80:30001/TCP   1m

如果 Rancher 部署了多个 Pod,可以通过以下命令查看所有 Pod 的日志:

bash


复制代码
kubectl logs -n cattle-system -l app=rancher --follow

helm安装的rancher重置admin密码

cp /root/.kube/config .
KUBECONFIG=./config
kubectl --kubeconfig $KUBECONFIG -n cattle-system exec $(kubectl --kubeconfig $KUBECONFIG -n cattle-system get pods -l app=rancher --no-headers | head -1 | awk '{ print $1 }') -c rancher -- reset-password

kubectl get svc --namespace default等价于 kubectl get svc --namespace default

kubectl get svc --all-namespaces表示列出所有空间下的服务

# dokcer方式搭建
docker run -d --privileged -p 60080:80 -p 60443:443 -v ./rancher_data:/var/lib/rancher --restart=always --name rancher-2.7.1 rancher/rancher:v2.7.1


helm方式搭建
helm install rancher rancher-latest/rancher \
  --namespace cattle-system \
  --set hostname=k8s.nguone.eu.org  --set bootstrapPassword=Ni4phughiotieCoo
kubectl apply -f nginx-pvc.yaml
kubectl get pvc
kubectl apply -f nginx-deployment.yaml
kubectl apply -f nginx-service.yaml
kubectl delete pvc nginx-pvc
kubectl apply -f nginx-test-pod.yaml

让其他节点加入到