首页
关于
推荐
搜索定位器
视频解码
电源计划
软件资源
博客友链
搜索
1
开源软件:m3u8.sqlite文件转视频工具
986 阅读
2
欢迎来到我的世界
753 阅读
3
iKuai+Openwrt实现虚拟WAN分流,再也不用担心旁路网关崩了影响全局网络
689 阅读
4
AI:ChatGPT,假如你是Java架构师
662 阅读
5
开源软件:Windows网络驱动器管理工具
629 阅读
资料整理
软件发布
世新家装
萌宠乐园
登录
搜索
标签搜索
Docker
CentOS7
开源软件
Jenkins
MySQL
JVM
世新家装
ZStack
Java
Spring
Shell脚本
docker-compose
iKuai
ESXi
Bean
BeanDefinition
小太阳鹦鹉
欢迎
C#
WPF
卖萌小老头
累计撰写
51
篇文章
累计收到
8
条评论
首页
栏目
资料整理
软件发布
世新家装
萌宠乐园
页面
关于
推荐
搜索定位器
视频解码
电源计划
软件资源
博客友链
搜索到
1
篇与
K8S
的结果
2022-10-03
Kubernetes(K8S)环境搭建(kubeadm)
服务器规划k8s-master:10.11.26.81k8s-node1:10.11.26.82k8s-node2:10.11.26.83软件环境操作系统:centos7.4内核版本:3.10.0-693.el7.x86_64Docker:18.09.9K8S:1.23.0Calico:v3.24Calico版本说明:环境准备# 根据规划设置主机名 hostnamectl set-hostname <hostname> # 关闭防火墙 systemctl stop firewalld systemctl disable firewalld # 关闭selinux setenforce 0 sed -i 's/enforcing/disabled/' /etc/selinux/config # 关闭swap分区 swapoff -a # 临时关闭 sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久关闭 # host对应关系 cat >> /etc/hosts <<EOF 10.11.26.81 k8s-master 10.11.26.82 k8s-node1 10.11.26.83 k8s-node2 EOF # 将桥接的IPv4流量传递到iptables的链 # 以下net.ipv4.ip_forward如存在=0,修改为1即可 cat > /etc/sysctl.d/k8s.conf <<EOF net.ipv4.ip_forward=1 net.ipv4.tcp_tw_recycle = 0 net.bridge.bridge-nf-call-ip6tables=1 net.bridge.bridge-nf-call-iptables=1 EOF #net.ipv6.conf.all.disable_ipv6=1 #net.ipv6.conf.all.forwarding=1 #net.ipv6.conf.lo.disable_ipv6=1 #net.ipv6.conf.default.disable_ipv6=1 # 生效 sysctl --system # 时间同步 yum install ntpdate -y ntpdate time.windows.com所有节点安装Docker、kubeadm、kubelet安装docker# 更新软件包和系统内核 yum -y update # 卸载旧版本 yum remove docker docker-common docker-selinux docker-engine # 安装依赖 yum install -y yum-utils device-mapper-persistent-data lvm2 # 设置yum源 yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 查看可用版本 yum list docker-ce --showduplicates | sort -r # 选定版本安装 yum -y install docker-ce-19.03.9 # 启动并设置开机启动 systemctl enable docker && systemctl start docker # 查看版本 docker version # 配置镜像加速,cgroup驱动等 cat > /etc/docker/daemon.json <<EOF { "graph": "/data/docker", "registry-mirrors": ["https://q4r4fe9a.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF # 重启docker systemctl restart docker # 查看docker信息,进行确认 docker info安装kubeadm、kubelet# 添加k8s阿里软件源 cat > /etc/yum.repos.d/kubernetes.repo <<EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg \ https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF # 安装 yum install -y \ kubelet-1.23.0 \ kubeadm-1.23.0 \ kubectl-1.23.0 # 启动 systemctl enable kubelet && systemctl start kubelet部署k8smaster和node节点>>> master节点kubeadm部署# 部署 kubeadm init \ --apiserver-advertise-address=10.11.26.81 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.23.0 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.240.0.0/16 \ --ignore-preflight-errors=all<<<< 参数说明 >>>>--apiserver-advertise-address API Server将要广播的监听地址。如指定为 0.0.0.0 将使用缺省的网卡地址。--image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址--kubernetes-version 为control plane选择一个特定的Kubernetes版本。缺省值: "stable-1"--service-cidr 集群内部虚拟网络,Pod统一访问入口,缺省值: "10.96.0.0/12"--pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致。如果设置了这个参数,control plane将会为每一个节点自动分配CIDRs。--apiserver-bind-port int32 API Server绑定的端口。缺省值: 6443--apiserver-cert-extra-sans stringSlice 可选的额外提供的证书主题别名(SANs)用于指定API Server的服务器证书。可以是IP地址也可以是DNS名称。--cert-dir string 证书的存储路径。缺省值: "/etc/kubernetes/pki"--config string kubeadm配置文件的路径。警告:配置文件的功能是实验性的。--cri-socket string 指明要连接的CRI socket文件。缺省值: "/var/run/dockershim.sock"--dry-run 不会应用任何改变;只会输出将要执行的操作。--feature-gates string 键值对的集合,用来控制各种功能的开关。可选项有:Auditing=true|false (当前为ALPHA状态 - 缺省值=false),CoreDNS=true|false (缺省值=true),DynamicKubeletConfig=true|false (当前为BETA状态 - 缺省值=false)-h, > --help 获取init命令的帮助信息--ignore-preflight-errors stringSlice 忽视检查项错误列表,列表中的每一个检查项如发生错误将被展示输出为警告,而非错误。 例如: 'IsPrivilegedUser,Swap'. 如填写为 'all' 则将忽视所有的检查项错误。--node-name string 指定节点的名称。--service-dns-domain string 为services另外指定域名, 例如: "myorg.internal"。缺省值: "cluster.local"--skip-token-print 不打印出由 kubeadm init 命令生成的默认令牌。--token string 这个令牌用于建立主从节点间的双向受信链接。格式为 [a-z0-9]{6}.[a-z0-9]{16} - 示例: abcdef.0123456789abcdef--token-ttl duration 令牌被自动删除前的可用时长 (示例: 1s, 2m, 3h). 如果设置为 '0', 令牌将永不过期。缺省值: 24h0m0s如上图图,信息不少。解释说明如下:你的Kubernetes 控制平面已经安装成功!开始使用集群前,你需要用普通用户执行mkdir... 或者你是root用户,执行export...现在应该讲pod网络部署到集群,执行“ kubectl apply -f [podnetwork].yaml ”,其中一个选项列在:https://kubernetes.io/docs/concepts/cluster-administration/addons/然后你可以加入任意数量的工作节点,在每个工作节点上以root身份运行以下命令:kubeadm join...kubeadm部署后,会输出一个join命令,先复制出来,node节点加入master会使用。在运行 kubeadm init 之前可以先执行 kubeadm config images pull 来测试与 gcr.io 的连接,kubeadm config images pull尝试是否可以拉取镜像,由于国内访问"k8s.gcr.io", "gcr.io", "quay.io" 有困难,这里采用自建docker register的方式构建私有镜像docker pull registry docker run --restart=always -d -p 15000:5000 -v /home/registry:/var/lib/registry registry# 本次生成的(node节点执行需要用到) kubeadm join 10.11.26.81:6443 --token ue0jg3.ya6n9z8zfx213xnk \ --discovery-token-ca-cert-hash sha256:0cbd1fe71f7ec93f519eabdcaf47a257785f411365e915f08072eb81c575f99c # 默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,可以直接使用命令快捷生成 kubeadm token create --print-join-command配置 kubectl# 如上图和说明,拷贝k8s认真文件 # 非root用户执行 mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config # root用户可执行 export KUBECONFIG=/etc/kubernetes/admin.conf注:以后所有yaml文件都只在Master节点执行。安装目录:/etc/kubernetes/组件配置文件目录:/etc/kubernetes/manifests/node节点开始 >>>node节点执行master节点生成的join命令# 这里复制master生成的一串命令(如果已过期,需要重新生成,请看文章上边的说明) kubeadm join 10.11.26.81:6443 --token ue0jg3.ya6n9z8zfx213xnk \ --discovery-token-ca-cert-hash sha256:0cbd1fe71f7ec93f519eabdcaf47a257785f411365e915f08072eb81c575f99cnode节点结束 <<<继续master节点运行查看加入的node节点NotReady是因为网络插件,继续# 获取node节点 kubectl get nodes如上图,现在所有节点是NotReady,需要安装网络插件,master节点部署时提到过。安装网络插件(CNI)在上述操作完成后,各个工作节点已经加入了集群,但是它们的状态都是 NoReady,这是由于无它们无法跨主机通信的原因。而 CNI 网络插件的主要功能就是实现 pod 资源能够跨宿主机进行通信。在master节点中执行以下命令进行配置,不同版本的可能会不兼容,具体请参考:https://projectcalico.docs.tigera.io/about/about-calicohttps://projectcalico.docs.tigera.io/releases# 下载配置文件 wget https://docs.projectcalico.org/manifests/calico.yaml # 下载完后还需要修改里面定义Pod网络(CALICO_IPV4POOL_CIDR),与前面kubeadm init的 --pod-network-cidr指定的一样。 # 修改完成部署(过程可能会失败) kubectl apply -f calico.yaml kubectl get pod --all-namespaces -o wide # 执行结束要等上一会才全部running kubectl get pods -n kube-system 以上操作执行完成后,master节点执行kubectl get nodes,可以看到status ready测试集群在Kubernetes集群中创建一个pod,验证是否正常运行创建一个pod,开放对外端口访问,这里会随机映射一个端口kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort查看pod状态,必须是running状态而且ready是1,并查看nginx svc的80端口映射到了哪个端口kubectl get pod,svc访问任意机器的刚刚查看的映射端口,看看是否nginx已经运行部署DashboardDashboard是官方提供的一个UI,可用于基本管理K8s资源。由于 K8s 版本不同,具体去这里查看对应的版本:https://github.com/kubernetes/dashboard/releases当前可用支持版本2.5.0wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml构建Podkubectl apply -f recommended.yaml查看 Pod 状态kubectl get pods --all-namespaces | grep dashboard kubectl get svc --all-namespacesdashboard 服务的 namespace 是 kubernetes-dashboard,但是该服务的类型是ClusterIP,不便于我们通过浏览器访问,因此需要改成 NodePort 类型的,删除现有的 dashboard 服务kubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard创建配置文件dashboard-svc.yaml,内容如下:kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboard spec: type: NodePort ports: - port: 443 targetPort: 8443 nodePort: 30001 selector: k8s-app: kubernetes-dashboard创建servicekubectl apply -f dashboard-svc.yaml 再次查看服务kubectl get svc --all-namespaces结果如下图:访问地址:https://NodeIP:30001,需要Token才能登陆哦。继续往下创建用户获取授权Token。创建service account并绑定默认cluster-admin管理员集群角色# 创建用户 kubectl create serviceaccount dashboard-admin -n kube-system # 用户授权 kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin # 获取用户Token kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}') # 本次得到Token eyJhbGciOiJSUzI1NiIsImtpZCI6InZLS292Q0UwRlNFUGRwRU9ySWlYNkRESkZNcjhpQ3Nic1kyM0hPdnNlV28ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tNGM2NDkiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYTQ3ODE5MzgtZDJiZi00MTEyLTlkMTUtNjk3YThiZTJhNDc5Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.0XTLd8Zgi1R44LmJhMhYdu1GqmihKr0ePtXFtLXQm9ddckHyrr-bWdlW50ppqikdVKCjC9cxrNcYKOvXWO1iqo1wsh89MHlXSMihyfl35BAig-hZbGAZWrmpyEawGwiS22dcS3t6iyvZDqkRriZ1-Zch8gRPol9P5gmtzv1AN62w0oJyTbHTK9emKymRyGU_eSKKGv12jmP0y1_ko40SAAh37CebDYrNo_tKcLeHxMJUVvVIxteqpV8C60tf15xSBaEt9g0fdvEXg0D84Pe314B-B5t7jmwrtbLR8EhukMV2Ngp2pKU6Q-fxjdx27WTDwOOvB5ohVJgQySMnc271hA输入token登陆成功k8s常用命令# 启动一个 Kubernetes 主节点 kubeadm init # 启动一个 Kubernetes 工作节点并且将其加入到集群 kubeadm join # 更新一个 Kubernetes 集群到新版本 kubeadm upgrade # 如果使用 v1.7.x 或者更低版本的 kubeadm 初始化集群,您需要对集群做一些配置以便使用 kubeadm upgrade 命令 kubeadm config # 管理 kubeadm join 使用的令牌 kubeadm token # 还原 kubeadm init 或者 kubeadm join 对主机所做的任何更改 kubeadm reset # 查看pod,service,endpoints,secret等等的状态 kubectl get 组件名 # 例如kubectl get pod 查看详细信息可以加上-o wide 其他namespace的指定 -n namespace名 # 创建,变更一个yaml文件内资源,也可以是目录,目录内包含一组yaml文件(实际使用中都是以yaml文件为主,直接使用命令创建pod的很少,推荐多使用yaml文件) kubectl apply -f xxx.yaml # 例如kubectl apply -f nginx.yaml 这里是如果没有则创建,如果有则变更,比create好用 # 删除一个yaml文件内资源,也可以是目录,目录内包含一组yaml文件 kubectl delete -f xxx.yaml # 例如kubectl delete -f nginx.yaml # 查看资源状态,比如有一组deployment内的pod没起来,一般用于pod调度过程出现的问题排查 kubectl describe pod pod名 # 先用kubectl get pod查看 有异常的复制pod名使用这个命令 # 查看pod日志,用于pod状态未就绪的故障排查 kubectl logs pod名 # 先用kubectl get pod查看 有异常的复制pod名使用这个命令 # 查看node节点或者是pod资源(cpu,内存资源)使用情况 kubectl top 组件名 # 例如kubectl top node kubectl top pod # 进入pod内部 kubectl exec -ti pod名 /bin/bash # 先用kubectl get pod查看 有需要的复制pod名使用这个命令
2022年10月03日
410 阅读
0 评论
0 点赞