五,Kubernetes_v1.14.2部署 kubectl

本文主要介绍在Kubernetes中部署kubectl及kubeconfig的操作。在k8s - master01节点执行操作,包括下载和分发kubectl二进制文件,创建并生成admin证书和私钥,创建kubeconfig文件,最后将相关文件分发到使用kubectl命令的节点。

 

一,下载和分发 kubectl 二进制文件

注意:

  1. 如果没有特殊指明,本文档的所有操作均在 k8s-master01 节点上执行,然后远程分发文件和执行命令
  2. 本文档只需要部署一次,生成的 kubeconfig 文件是通用的,可以拷贝到需要执行 kubeclt 命令的机器上

下载和解压:

wget https://dl.k8s.io/v1.14.2/kubernetes-node-linux-amd64.tar.gz
mkdir -p /opt/kubernetes/package

tar -xzvf kubernetes-node-linux-amd64.tar.gz -C /opt/kubernetes/package/
#验证是否解压成功
ls /opt/kubernetes/package/kubernetes/node/bin

 

 

二,分发 kubectl 到所有使用 kubectl 的节点

source /root/env.sh
for master_ip in ${MASTER_IPS[@]}
do
echo -e "\033[31m>>> ${master_ip} \033[0m"
scp /opt/kubernetes/package/kubernetes/node/bin/kubectl root@${master_ip}:/opt/kubernetes/bin/
ssh root@${master_ip} "chmod +x /opt/kubernetes/bin/*"
done
#验证是否分发成功
source /root/env.sh
for master_ip in ${MASTER_IPS[@]}
do
echo -e "\033[31m>>> ${master_ip} \033[0m"
ssh root@${master_ip} "ls -ld /opt/kubernetes/bin/kubectl"
done

 

 

三,创建 admin 证书和私钥

kubectl 与 apiserver https 安全端口通信,apiserver 对提供的证书进行认证和授权。

kubectl 作为集群的管理工具,需要被授予最高权限。这里创建具有最高权限的 admin 证书。

创建证书签名请求

cd /opt/kubernetes/ssl
cat > admin-csr.json <<EOF
{
  "CN": "admin",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "system:masters",
      "OU": "System"
    }
  ]
}
EOF
  • O 为 system:masters,kube-apiserver 收到该证书后将请求的 Group 设置为 system:masters;
  • 预定义的 ClusterRoleBinding cluster-admin 将 Group system:masters 与 Role cluster-admin 绑定,该 Role 授予所有 API的权限;
  • 该证书只会被 kubectl 当做 client 证书使用,所以 hosts 字段为空;

 

 

四,生成admin证书和私钥

cd /opt/kubernetes/ssl

cfssl gencert -ca=/opt/kubernetes/ssl/ca.pem \
   -ca-key=/opt/kubernetes/ssl/ca-key.pem \
   -config=/opt/kubernetes/ssl/ca-config.json \
   -profile=kubernetes admin-csr.json | cfssljson -bare admin
#验证是否生成成功
ls admin.csr admin-key.pem admin.pem

 

 

五,创建 kubeconfig 文件

kubeconfig 为 kubectl 的配置文件,包含访问 apiserver 的所有信息,如 apiserver 地址、CA 证书和自身使用的证书
 

cd /opt/kubernetes/ssl

#设置集群参数
kubectl config set-cluster kubernetes \
--certificate-authority=/opt/kubernetes/ssl/ca.pem \
--embed-certs=true \
--server=https://172.27.128.200:6443

 

#设置客户端认证参数
kubectl config set-credentials admin \
--client-certificate=/opt/kubernetes/ssl/admin.pem \
--embed-certs=true \
--client-key=/opt/kubernetes/ssl/admin-key.pem

 

#设置上下文参数
kubectl config set-context kubernetes \
--cluster=kubernetes \
--user=admin
#设置默认上下文
kubectl config use-context kubernetes
  • --certificate-authority:验证 kube-apiserver 证书的根证书;
  • --client-certificate--client-key:刚生成的 admin 证书和私钥,连接 kube-apiserver 时使用;
  • --embed-certs=true:将 ca.pem 和 admin.pem 证书内容嵌入到生成的 kubectl.kubeconfig 文件中(不加时,写入的是证书文件路径);

 

 

六,分发 kubeconfig 文件

分发到所有使用 kubectl 命令的节点

source /root/env.sh
for master_ip in ${MASTER_IPS[@]}
do
echo -e "\033[31m>>> ${master_ip} \033[0m"
ssh root@${master_ip} "mkdir -p ~/.kube"
scp ~/.kube/config root@${master_ip}:~/.kube/config
done
#验证是否创建目录,分发成功
source /root/env.sh
for master_ip in ${MASTER_IPS[@]}
do
echo -e "\033[31m>>> ${master_ip} \033[0m"
ssh root@${master_ip} "ls -ld ~/.kube"
done

保存到用户的 ~/.kube/config 文件

### Kubernetes 单实例集群部署指南 在 Kubernetes部署单实例集群通常涉及配置和管理一个节点作为主节点和工作节点的组合。以下是一个完整的指南,涵盖了从安装到验证的过程。 #### 1. 安装 Kubernetes 确保目标机器已安装 Kubernetes,并将其配置为单节点模式。可以使用 kubeadm 工具简化安装过程[^1]。 ```bash # 初始化主节点并指定 Pod 网络 CIDR sudo kubeadm init --pod-network-cidr=10.244.0.0/16 ``` 初始化完成后,执行输出中的命令以配置 kubeconfig 文件: ```bash mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` #### 2. 配置 Pod 网络插件 选择一个支持的 Pod 网络插件(如 Flannel、Calico),并应用其配置文件。 ```bash kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml ``` #### 3. 将节点标记为可调度 默认情况下,主节点会被标记为不可调度。需要取消此限制以允许在单节点上运行工作负载。 ```bash kubectl taint nodes --all node-role.kubernetes.io/control-plane- kubectl taint nodes --all node-role.kubernetes.io/master- ``` #### 4. 部署 Nginx 示例服务 创建一个简单的 Nginx 部署和服务,验证集群功能。 **nginx-deploy.yaml** ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 ``` **nginx-svc.yaml** ```yaml apiVersion: v1 kind: Service metadata: name: nginx-service spec: type: NodePort ports: - port: 80 targetPort: 80 nodePort: 30001 selector: app: nginx ``` 应用配置文件: ```bash kubectl create -f nginx-deploy.yaml kubectl create -f nginx-svc.yaml ``` 验证服务是否正常运行: ```bash kubectl get services kubectl get pods -o wide ``` #### 5. 部署 Ingress 控制器 为了启用 Ingress 功能,可以安装 Nginx Ingress 控制器。参考以下步骤[^2]。 下载官方的 Nginx Ingress 配置文件: ```bash wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml ``` 编辑 `deploy.yaml` 文件,确保命名空间正确,并应用配置: ```bash kubectl apply -f deploy.yaml ``` 如果需要自定义标签或命名空间,请参考相关文档[^3]。 #### 6. 测试 Ingress 创建一个简单的 Ingress 资源文件来测试外部访问。 **nginx-ingress.yaml** ```yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nginx-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: nginx.example.com http: paths: - path: / pathType: Prefix backend: service: name: nginx-service port: number: 80 ``` 应用配置: ```bash kubectl apply -f nginx-ingress.yaml ``` 验证 Ingress 是否生效: ```bash kubectl get ingress ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值