k8s三:k8s安装与kubectl指令 本是古典 何须时尚 2022-11-07 13:23 237阅读 0赞 2.1 k8s的安装与配置 2.1.1 准备工作 以centOs为例 查看Linux系统版本的命令 1、cat /etc/issue,此命令也适用于所有的Linux发行版。 \[root@S-CentOS home\]\# cat /etc/issue CentOS release 6.5 (Final) Kernel \\r on an \\m 2、cat /etc/redhat-release,这种方法只适合Redhat系的Linux: \[root@S-CentOS home\]\# cat /etc/redhat-release CentOS release 6.5 (Final) 参考:https://www.cnblogs.com/klb561/p/9157569.html 查看防火墙状态 systemctl status firewalld systemctl stop firewalld 参考:https://blog.csdn.net/wade3015/article/details/90725871 主机上禁用SELinux,让容器可以读取文件系统 cat /etc/sysconfig/selinux setenforce 0 2.1.2 使用kubeadm工具快速安装k8s集群 新建分支配置文件: vi /etc/yum.repos.d/kubernetes.repo 内容如下: \[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 cat /etc/yum.repos.d/kubernetes.repo 安装kubelet\\kubeadm\\kubectl yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0 说明:上面的操作需要在所有机器上处理 部署k8s master 说明:该操作仅需要在master节点执行,这里的apiserve需要修改成自己的master地址 kubeadm init \\ \--apiserver-advertise-address=192.168.73.138 \\ \--image-repository registry.aliyuncs.com/google\_containers \\ \--kubernetes-version v1.15.0 \\ \--service-cidr=10.1.0.0/16 \\ \--pod-network-cidr=10.244.0.0/16 根据输出提示操作: \[root@k8s-master ~\]\# mkdir -p $HOME/.kube \[root@k8s-master ~\]\# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config \[root@k8s-master ~\]\# sudo chown $(id -u):$(id -g) $HOME/.kube/config 默认token的有效期为24小时,当过期之后,该token就不可用了, 如果后续有nodes节点加入,解决方法如下: 重新生成新的token kubeadm token create \[root@k8s-master ~\]\# kubeadm token create 0w3a92.ijgba9ia0e3scicg \[root@k8s-master ~\]\# kubeadm token list TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS 0w3a92.ijgba9ia0e3scicg 23h 2019-09-08T22:02:40+08:00 authentication,signing <none> system:bootstrappers:kubeadm:default-node-token t0ehj8.k4ef3gq0icr3etl0 22h 2019-09-08T20:58:34+08:00 authentication,signing The default bootstrap token generated by 'kubeadm init'. system:bootstrappers:kubeadm:default-node-token \[root@k8s-master ~\]\# 获取ca证书sha256编码hash值 \[root@k8s-master ~\]\# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.\* //' ce07a7f5b259961884c55e3ff8784b1eda6f8b5931e6fa2ab0b30b6a4234c09a 节点加入集群 \[root@k8s-node01 ~\]\# kubeadm join --token aa78f6.8b4cafc8ed26c34f --discovery-token-ca-cert-hash sha256:0fd95a9bc67a7bf0ef42da968a0d55d92e52898ec37c971bd77ee501d845b538 192.168.73.138:6443 --skip-preflight-chec 加入k8s node 在两个 Node 节点执行 使用kubeadm join 注册Node节点到Matser kubeadm join 的内容,在上面kubeadm init 已经生成好了 \[root@k8s-node01 ~\]\# kubeadm join 192.168.4.34:6443 --token 2nm5l9.jtp4zwnvce4yt4oj \\ --discovery-token-ca-cert-hash sha256:12f628a21e8d4a7262f57d4f21bc85f8802bb717dd6f513bf9d33f254fea3e89 安装网络插件 只需要在Master 节点执行 \[root@k8s-master ~\]\# wget https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml 修改镜像地址:(有可能默认不能拉取,确保能够访问到quay.io这个registery,否则修改如下内容) \[root@k8s-master ~\]\# vim kube-flannel.yml image: lizhenliang/flannel:v0.11.0-amd64 \[root@k8s-master ~\]\# cat -n kube-flannel.yml|grep lizhenliang/flannel:v0.11.0-amd64 \[root@k8s-master ~\]\# kubectl apply -f kube-flannel.yml \[root@k8s-master ~\]\# ps -ef|grep flannel 查看集群的node状态,安装完网络工具之后,只有显示如下状态,所有节点全部都Ready好了之后才能继续后面的操作 测试Kubernetes集群 在Kubernetes集群中创建一个pod,然后暴露端口,验证是否正常访问: \[root@k8s-master ~\]\# kubectl create deployment nginx --image=nginx \[root@k8s-master ~\]\# kubectl expose deployment nginx --port=80 --type=NodePort \[root@k8s-master ~\]\# kubectl get pods,svc 访问地址:http://NodeIP:Port ,此例就是:http://192.168.73.138:32039 部署 Dashboard \[root@k8s-master ~\]\# wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml \[root@k8s-master ~\]\# vim kubernetes-dashboard.yaml 修改内容: 109 spec: 110 containers: 111 - name: kubernetes-dashboard 112 image: lizhenliang/kubernetes-dashboard-amd64:v1.10.1 \# 修改此行 ...... 157 spec: 158 type: NodePort \# 增加此行 159 ports: 160 - port: 443 161 targetPort: 8443 162 nodePort: 30001 \# 增加此行 163 selector: 164 k8s-app: kubernetes-dashboard \[root@k8s-master ~\]\# kubectl apply -f kubernetes-dashboard.yaml 创建service account并绑定默认cluster-admin管理员集群角色: \[root@k8s-master ~\]\# kubectl create serviceaccount dashboard-admin -n kube-system serviceaccount/dashboard-admin created \[root@k8s-master ~\]\# kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin \--serviceaccount=kube-system:dashboard-admin \[root@k8s-master ~\]\# kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/\{print $1\}') 参考:https://www.cnblogs.com/double-dong/p/11483670.html 2.1.4 k8s集群的安全设置 如果仅仅在内网中使用,则k8s的各个组件与master之间可以通过apiserver的非安全端口http://apiserver:8080进行访问。如果apiserver需要对外提供服务,则需要启用https安全机制。有如下两种方式: 1)基于CA签名的双向数字证书认证方式 2)基于http base或token的认证方式 2.1.5 k8s集群的网络配置 需要实现跨主机荣期间的网络互通,k8s优先使用CNI网络插件打通跨主机的容器网络。 2.1.6 内网中k8s相关配置 因为docker需要获取internet中的镜像等资源,而部分企业由于安全问题会无法访问Internet,所以可能需要创建私有的docker registry,并修改k8s的相关配置。 2.1.7 k8s的版本升级 1)获取最新的k8s二进制文件 2)挨个隔离Node,等待去廍容器工作完成后,更细kubelet和kube-proxy服务文件,然后重启两个服务 3) 更新master的kube-apiserver、kube-controller-manager、kube-scheduler服务文件并重启 2.2 kubectl命令行工具用法详解 2.2.1 概述 kubectl \[command\] \[TYPE\] \[NAME\] \[flags\] command:子命令,操作k8s资源的命令,如create、delete、get、describe、apply等 TYPE:资源类型,区分大小写,如pod、clusters、deployments、nodes、services等, NAME:资源对象的名称,区分大小写。如果不指定名称,则默认返回全部 2.2.2 子命令详解 2.2.3 参数列表 2.2.4 输出格式 2.2.5 操作实例 资源创建 kubectl create -f my-service.yaml -f my-rc.yaml \#一次性创建service和rc kubectl create -f <directory> \#路径下所有的yaml yml json进行文件的创建 资源查看 kubectl get pods \#查看所有pod列表 kubectl get service,rc 资源描述(详情) kubectl describe nodes <node-name> \#获取某规则资源的详情 kubectl describe pods/<pod-name> kubectl describe pods <rc-name> 删除资源 kubectl delete -f pod.yml \#基于yaml的定义删除pod kubectl delete pods,services -l name=<label-name> \#基于标签名称删除pod和service kubectl delete pods -all \#删除所有pod 执行容器命令 kubectl exec <pod-name> date \#在某个pod中执行命令,默认第一个容器 kubectl exec <pod-name> -c <contianer-name> date \#在指定pod的指定容器中执行 kubectl exec <pod-name> -c <contianer-name> /bin/bash 获取容器日志 kubectl logs <pod-name> kubectl logs -f <pod-name> -c <container-name> kubectl的基本指令: kubectl create -f 我的配置文件 基于yaml文件创建对象 kubectl get pods -l app=nginx 从 Kubernetes 里面获取(GET)指定的 API 对象。可以看到,在这里我还加上了一个 -l 参数,即获取所有匹配 app: nginx 标签的 Pod。 kubectl describe pod nginx-deployment-67594d6bf6-9gdvr kubectl describe 命令,查看一个 API 对象的细节 kubectl get deployments kubectl describe deployment nginx-deployment \#推荐的yaml文件执行方式 kubectl apply -f nginx-deployment.yaml 进入Pod当中 $ kubectl exec -it nginx-deployment-5c678cfb6d-lg9lw -- /bin/bash \# ls /usr/share/nginx/html 删除这个 Nginx Deployment $ kubectl delete -f nginx-deployment.yaml 对nginx服务升级 1 修改yaml ... spec: containers: - name: nginx image: nginx:1.8 \#这里被从1.7.9修改为1.8 ports: - containerPort: 80 更新在 Kubernetes 里也生效: $ kubectl replace -f nginx-deployment.yaml 我推荐你使用 kubectl apply 命令,来统一进行 Kubernetes 对象的创建和更新操作,具体做法如下所示: $ kubectl apply -f nginx-deployment.yaml \# 修改nginx-deployment.yaml的内容 $ kubectl apply -f nginx-deployment.yaml
还没有评论,来说两句吧...