k8s_6">初步:搭建k8s集群
k8s 集群主机清单
主机名 | ip地址 |
---|---|
master | 1.50 |
node-0001 | 1.51 |
node-0002 | 1.52 |
node-0003 | 1.53 |
node-0004 | 1.54 |
node-0005 | 1.55 |
harbor | 1.30 |
事先准备
-
安装工具
dnf install -y kubeadm kubelet kubectl containerd.io ipvsadm ipset iproute-tc
修改配置文件
vim /etc/containerd/config.toml61:sandbox_image = "harbor:443/k8s/pause:3.9" 125:SystemdCgroup = true 154行新插入: [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint = ["https://harbor:443"][plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor:443"]endpoint = ["https://harbor:443"][plugins."io.containerd.grpc.v1.cri".registry.configs."harbor:443".tls]insecure_skip_verify = true
-
配置内核参数
[root@master ~]# cat /etc/modules-load.d/containerd.conf overlay br_netfilter xt_conntrack [root@master ~]# systemctl start systemd-modules-load.service [root@master ~]# cat /etc/sysctl.d/99-kubernetes-cri.conf net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.netfilter.nf_conntrack_max = 1000000 [root@master ~]# sysctl -p /etc/sysctl.d/99-kubernetes-cri.conf
设置Tab补全功能键
[root@master ~]# source <(kubeadm completion bash|tee /etc/bash_completion.d/kubeadm) # 使用kubeadm completion bash生成适用于bash shell的kubeadm命令补全脚本,通过重定向将以上脚本作为source命令的输入,既激活kubeadm的命令补全功能,同时使用tee命令将补全脚本保存在指定的kubeadm文件中,确保未来bash会话h中,无需执行以上命令就可以享受kubeadm命令补全功能。 [root@master ~]# source <(kubectl completion bash|tee /etc/bash_completion.d/kubectl) #同理如上,此次针对kubectl命令的补全功能
对master主控节安装
-
测试系统环境
[root@master ~]# kubeadm init --config=init/init.yaml --dry-run 2>error.log # --dry-run 模拟测试,不会对系统环境产生影响 [root@master ~]# cat error.log # 查看是否有生成错误信息和警告 [root@master ~]# rm -rf error.log /etc/kubernetes/tmp # 删除前任初始化的残留tmp,可以说没必要,模拟测试不会产生任何临时文件
-
主控节点初始化
[root@master ~]# kubeadm init --config=init/init.yaml | tee init/init.log # 初始化主控节点,会生成/etc/kubernetes/admin.conf [root@master ~]# mkdir -p $HOME/.kube [root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config [root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config # 给本地用户创建个集中便捷,具有管理员权限的k8s客户端配置环境,无需通过系统目录的配置admin.conf对k8s客户端进行管理,更好使用kubectl等工具管理初始化好的k8s集群 # 复制 admin.conf 到 ~/.kube/config 是为了方便本地用户(尤其是非 root 用户)使用 kubectl 等 Kubernetes 客户端工具与刚刚初始化的集群进行交互。# 验证安装结果 [root@master ~]# kubectl get nodesNAME STATUS ROLES AGE VERSION master NotReady control-plane 19s v1.26.0 # notready 尚未准备好接收工作负载#部署calico网络插件 [root@master calico]# kubectl apply -f calico.yaml [root@master calico]# kubectl get nodesNAME STATUS ROLES AGE VERSION master Ready control-plane 23m v1.26.0 #此时ready准备好进行工作负载 # Calico 是一个流行的开源网络解决方案,常用于 Kubernetes 集群中提供网络连接、策略管理和安全性。 # 可使用 kubectl get pods -n calico-system 等命令监控 Calico 组件的状态,确保它们成功启动且运行正常。
-
安装计算节点(node系列)
1.先从master主机获取凭证
# 查看 token[root@master ~]# kubeadm token listTOKEN TTL EXPIRES abcdef.0123456789abcdef 23h 2022-04-12T14:04:34Z# 删除 token[root@master ~]# kubeadm token delete abcdef.0123456789abcdefbootstrap token "abcdef" deleted# 创建 token[root@master ~]# kubeadm token create --ttl=0 --print-join-command # ttl设置token到期周期,0为无限期 kubeadm join 192.168.1.50:6443 --token fhf6gk.bhhvsofvd672yd41 --discovery-token-ca-cert-hash sha256:ea07de5929dab8701c1bddc347155fe51c3fb6efd2ce8a4177f6dc03d5793467 # 只需要复制以上生成的命令到各个计算节点粘贴执行就好
2.对各个计算节点进行配置(是否防火墙关掉/禁用swap、安装k8s相关软件包、配置内核参数)
3.逐个加入master集群
kubeadm join 192.168.1.50:6443 --token fhf6gk.bhhvsofvd672yd41 --discovery-token-ca-cert-hash sha256:ea07de5929dab8701c1bddc347155fe51c3fb6efd2ce8a4177f6dc03d5793467
-
通过master主机查看所有加入集群的计算节点主机
# 验证节点工作状态 [root@master ~]# kubectl get nodes# 验证容器工作状态 [root@master ~]# kubectl -n kube-system get pods
k8s_165">k8s集群管理
-
集群管理命令
子命令 | 说明 |
---|---|
help | 用于查看命令及子命令的帮助信息 |
cluster-info | 显示集群的相关配置信息 |
version | 查看服务器及客户端的版本信息 |
api-resources | 查看当前服务器上所有的资源对象 |
api-versions | 查看当前服务器上所有资源对象的版本 |
config | 管理当前节点上kubeconfig 的认证信息 |
-
kubectl api-resources NAME SHORTNAMES APIVERSION NAMESPACED KINDbindings v1 true Bindingendpoints ep v1 true Endpoints# 查看资源对象类型 namespaced 是否属于某命名空间,如果是false则是集群级别的,不属于任何特定命名空间,而是与整个集群的运行状态相关。 kind 资源类型名
-
config
# 查看当前认证使用的用户及证书[root@master ~]# kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO* kubernetes-admin@kubernetes kubernetes kubernetes-admin# 使用 view 查看详细配置[root@master ~]# kubectl config view apiVersion: v1clusters:- cluster:certificate-authority-data: DATA+OMITTEDserver: https://192.168.1.50:6443name: kubernetescontexts:- context:cluster: kubernetesuser: kubernetes-adminname: kubernetes-admin@kubernetescurrent-context: kubernetes-admin@kuberneteskind: Configpreferences: {}users:- name: kubernetes-adminuser:client-certificate-data: REDACTEDclient-key-data: REDACTED
对其他主机进行管理授权
设置本地用户的 Kubernetes 配置文件,以便于使用
kubectl
等命令行工具以管理员身份访问和管理 Kubernetes 集群
[root@harbor ~]# dnf install -y kubectl[root@harbor ~]# mkdir -p $HOME/.kube[root@harbor ~]# rsync -av master:/etc/kubernetes/admin.conf $HOME/.kube/config[root@harbor ~]# chown $(id -u):$(id -g) $HOME/.kube/config# 验证节点工作状态
[root@harbor ~]# kubectl get nodes
何为pod?
pod由一个或者多个容器组成
pod是k8s中最小的管理元素
pod是一个服务的多个进程的聚合单位
同一个pod共享网络ip以及权限、共享主机名称、共享存储设备
pod管理命令
子命令 | 说明 | 备注 |
---|---|---|
run/create | 创建资源对象 | 可输出资源文件模板 |
get | 查看资源对象的状态信息 | 常用参数: -o 显示格式 |
describe | 查询资源对象的属性信息 | |
logs | 查看容器的报错信息 | 常用参数: -c 容器名称 |
exec | 在某一个容器内执行特定的命令 | 可选参数: -c 容器名称 |
cp | 在容器和宿主机之间拷贝文件或目录 | 可选参数: -c 容器名称 |
delete | 删除资源对象 | 可选参数: -l 标签 |
-
get
kubectl get pods # 查看默认名称空间default下的podskubectl get pods -o name/wide/yaml/json #看pod名、详细信息、yaml格式的、json格式的详细信息kubectl get namespaces //查看所有名称空间kubectl -n kube-system get pods //查看指定的命名空间的所有pod(pods)
-
create
kubectl create namespace work //创建命名空间资源对象
-
run
kubectl -n work run myhttp --image=myos:httpd #在work命名空间创建myhttp的pod资源对象
-
describe
kubectl describe pod myweb //查看资源对象的属性信息 是default命名空间的myweb如果要看work命名空间下的myhttp,则需要kubectl -n work describe pod myhttp # 可以查看到myweb资源分配给了哪位计算节点
-
logs
kubectl logs myweb //查看myweb日志
-
exec
kubectl exec myweb -- ls //在myweb执行命令lskubectl exec -it myweb -- /bin/bash //以交互式进入bash
-
cp
kubectl cp myweb:/etc/yum.repos.d /root/aaa
-
delete
kubectl delete pods myweb kubectl -n work delete pods --allkubectl delete namespaces work
资源对象文件入门
简单的资源对象文件例如:
cat myweb.yaml
--- kind: Pod //资源类型pod apiVersion: v1 //k8s api版本v1,是当前稳定的版本 metadata: