13

k8s集群搭建-新-以及k8s相关命令详情-李佳良的博客

 4 years ago
source link: https://blog.51cto.com/13555423/2503576
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

k8s集群搭建-新-以及k8s相关命令详情

修改主机名
hostnamectl set-hostname master00

hostnamectl set-hostname node1

hostnamectl set-hostname node2 所有集群主机都改好,主机名自定义

修改/etc/hosts文件,所有主机都修改
192.168.5.100 master00
192.168.5.101 node01
192.168.5.102 node02

swapoff -a 

sed -i 's/.*swap.*/#&/' /etc/fstab

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl -p /etc/sysctl.conf

systemctl stop firewalld

systemctl disable firewalld

setenforce  0 

sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux 

sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

cat <<EOF >  /etc/yum.repos.d/kubernetes.repo 
[kubernetes]
name=kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
enable=1
EOF

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

yum install docker-ce -y

systemctl enable docker

systemctl start docker

yum -y install kubelet kubeadm  kubectl kubernetes-cni

systemctl enable kubelet.service

systemctl start kubelet

kubeadm config print init-defaults > kubeadm.conf

#注:sed这一步操作可自行进入 kubeadm.conf中修改自定义版本,我的是v1.18.2
sed -i s/v1.14.0/v1.14.3/ kubeadm.conf

kubeadm config images pull --config kubeadm.conf

kubeadm init --kubernetes-version=v1.18.0 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.111.128

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml

完了之后记住下面两行内容,因为node加入集群需要用到
kubeadm join 192.168.5.100:6443 --token j2tngs.y5fzfd9ph5ppdien \
    --discovery-token-ca-cert-hash sha256:b2a2b249a16aaf2f1784ab6206fb6abd279e8c70cf0b470c7fd004f1b8fdb481
查看集群状态
kubectl get cs

NAME                 STATUS         MESSAGE             ERROR
controller-manager   Healthy      ok                  
scheduler                  Healthy      ok                  
etcd-0                       Healthy      {"health":"true"}   成功
kubectl get pods --all-namespaces

NAMESPACE     NAME                               READY   STATUS    RESTARTS   AGE
kube-system   coredns-fb8b8dccf-khsgh            1/1     Running   0          2m2s
kube-system   coredns-fb8b8dccf-rrxgb             1/1     Running   0          2m2s
kube-system   etcd-master00                             1/1     Running   0          78s
kube-system   kube-apiserver-master00            1/1     Running   0          73s
kube-system   kube-controller-manager-master 00   1/1     Running   0          79s
kube-system   kube-flannel-ds-amd64-xpr74     1/1     Running   0          2m2s
kube-system   kube-proxy-dhvcr                         1/1     Running   0          2m2s
kube-system   kube-scheduler-master00            1/1     Running   0          57s

如果STATUS不是Running 请等几分钟再查看,还是没有,查看报错日志 cat /var/log/messages,然后找失败原因

master部署完了,下面是node部署

swapoff -a 

sed -i 's/.*swap.*/#&/' /etc/fstab

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl -p /etc/sysctl.conf

systemctl stop firewalld

systemctl disable firewalld

setenforce  0 

sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux 

sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

cat <<EOF >  /etc/yum.repos.d/kubernetes.repo 
[kubernetes]
name=kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
enable=1
EOF

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

yum install docker-ce -y

systemctl enable docker

systemctl start docker

yum -y install kubelet kubeadm  kubectl kubernetes-cni

systemctl enable kubelet.service

systemctl start kubelet

kubeadm config print init-defaults > kubeadm.conf
#注:sed这一步操作可自行进入 kubeadm.conf中修改自定义版本,我的是v1.18.2
sed -i s/v1.14.0/v1.14.3/  kubeadm.conf

kubeadm config images pull --config kubeadm.conf
部署k8s控制台rancher(在加入Node 节点前部署rancher)
docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher:latest

在rancher中导入现有k8s集群

k8s集群搭建-新-以及k8s相关命令详情
k8s集群搭建-新-以及k8s相关命令详情
k8s集群搭建-新-以及k8s相关命令详情
在K8S集群执行
kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user admin
curl --insecure -sfL https://192.168.235.129/v3/import/2422pk4x5fk9pv8rznqj9mr8r2mvphdxsbqxjpmgc4qsml7hdtzgsc.yaml | kubectl apply -f -

然后加入集群:通过刚刚master的记录加入

kubeadm join 192.168.5.100:6443 --token j2tngs.y5fzfd9ph5ppdien \
    --discovery-token-ca-cert-hash sha256:b2a2b249a16aaf2f1784ab6206fb6abd279e8c70cf0b470c7fd004f1b8fdb481

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

Run 'kubectl get nodes' on the control-plane to see this node join the cluster  成功加入集群

然后所有的node依次加入集群

查看集群状态
kubectl get cs

查看集群节点
kubectl get nodes

新生成加入集群密钥

kubeadm token create
kubeadm token list
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
kubeadm join 192.168.5.100:6443 --token j2tngs.y5fzfd9ph5ppdien \
    --discovery-token-ca-cert-hash sha256:b2a2b249a16aaf2f1784ab6206fb6abd279e8c70cf0b470c7fd004f1b8fdb481

k8s一些相关命令:
#查看所有namespace的pods运行情况
#kubectl get pods --all-namespaces
#查看具体pods,记得后边跟namespace名字哦
kubectl get pods kubernetes-dashboard-76479d66bb-nj8wr --namespace=kube-system
查看pods具体信息
kubectl get pods -o wide kubernetes-dashboard-76479d66bb-nj8wr --namespace=kube-system
查看集群健康状态
kubectl get cs
获取所有deployment
kubectl get deployment --all-namespaces
列出该 namespace 中的所有 pod 包括未初始化的
kubectl get pods --include-uninitialized
查看deployment()
kubectl get deployment nginx-app
查看rc和servers
kubectl get rc,services
查看pods结构信息(重点,通过这个看日志分析错误)
对控制器和服务,node同样有效
kubectl describe pods xxxxpodsname --namespace=xxxnamespace
其他控制器类似吧,就是kubectl get 控制器 控制器具体名称
查看pod日志
kubectl logs $POD_NAME
查看pod变量
kubectl exec my-nginx-5j8ok -- printenv | grep SERVICE
集群
kubectl get cs # 集群健康情况
kubectl cluster-info # 集群核心组件运行情况
kubectl get namespaces # 表空间名
kubectl version # 版本
kubectl api-versions # API
kubectl get events # 查看事件
kubectl get nodes //获取全部节点
kubectl delete node k8s2 //删除节点
kubectl rollout status deploy nginx-test


创建
kubectl create -f ./nginx.yaml # 创建资源
kubectl create -f . # 创建当前目录下的所有yaml资源
kubectl create -f ./nginx1.yaml -f ./mysql2.yaml # 使用多个文件创建资源
kubectl create -f ./dir # 使用目录下的所有清单文件来创建资源
kubectl create -f https://git.io/vPieo # 使用 url 来创建资源
kubectl run -i --tty busybox --image=busybox ----创建带有终端的pod
kubectl run nginx --image=nginx # 启动一个 nginx 实例
kubectl run mybusybox --image=busybox --replicas=5 ----启动多个pod
kubectl explain pods,svc # 获取 pod 和 svc 的文档


更新
kubectl rolling-update python-v1 -f python-v2.json # 滚动更新 pod frontend-v1
kubectl rolling-update python-v1 python-v2 --image=image:v2 # 更新资源名称并更新镜像
kubectl rolling-update python --image=image:v2 # 更新 frontend pod 中的镜像
kubectl rolling-update python-v1 python-v2 --rollback # 退出已存在的进行中的滚动更新
cat pod.json | kubectl replace -f - # 基于 stdin 输入的 JSON 替换 pod
强制替换,删除后重新创建资源。会导致服务中断。
kubectl replace --force -f ./pod.json
为 nginx RC 创建服务,启用本地 80 端口连接到容器上的 8000 端口
kubectl expose rc nginx --port=80 --target-port=8000


更新单容器 pod 的镜像版本(tag)到 v4
kubectl get pod nginx-pod -o yaml | sed 's/(image: myimage):.*$/\1:v4/' | kubectl replace -f -
kubectl label pods nginx-pod new-label=awesome # 添加标签
kubectl annotate pods nginx-pod icon-url=http://goo.gl/XXBTWq # 添加注解
kubectl autoscale deployment foo --min=2 --max=10 # 自动扩展 deployment “foo”


编辑资源
kubectl edit svc/docker-registry # 编辑名为 docker-registry 的 service
KUBE_EDITOR="nano" kubectl edit svc/docker-registry # 使用其它编辑器


动态伸缩pod
kubectl scale --replicas=3 rs/foo # 将foo副本集变成3个
kubectl scale --replicas=3 -f foo.yaml # 缩放“foo”中指定的资源。
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql # 将deployment/mysql从2个变成3个
kubectl scale --replicas=5 rc/foo rc/bar rc/baz # 变更多个控制器的数量
kubectl rollout status deploy deployment/mysql # 查看变更进度


删除
kubectl delete -f ./pod.json # 删除 pod.json 文件中定义的类型和名称的 pod
kubectl delete pod,service baz foo # 删除名为“baz”的 pod 和名为“foo”的 service
kubectl delete pods,services -l name=myLabel # 删除具有 name=myLabel 标签的 pod 和 serivce
kubectl delete pods,services -l name=myLabel --include-uninitialized # 删除具有 name=myLabel 标签的 pod 和 service,包括尚未初始化的
kubectl -n my-ns delete po,svc --all # 删除 my-ns namespace下的所有 pod 和 serivce,包括尚未初始化的
kubectl delete pods prometheus-7fcfcb9f89-qkkf7 --grace-period=0 --force 强制删除


交互
kubectl logs nginx-pod # dump 输出 pod 的日志(stdout)
kubectl logs nginx-pod -c my-container # dump 输出 pod 中容器的日志(stdout,pod 中有多个容器的情况下使用)
kubectl logs -f nginx-pod # 流式输出 pod 的日志(stdout)
kubectl logs -f nginx-pod -c my-container # 流式输出 pod 中容器的日志(stdout,pod 中有多个容器的情况下使用)
kubectl run -i --tty busybox --image=busybox -- sh # 交互式 shell 的方式运行 pod
kubectl attach nginx-pod -i # 连接到运行中的容器
kubectl port-forward nginx-pod 5000:6000 # 转发 pod 中的 6000 端口到本地的 5000 端口
kubectl exec nginx-pod -- ls / # 在已存在的容器中执行命令(只有一个容器的情况下)
kubectl exec nginx-pod -c my-container -- ls / # 在已存在的容器中执行命令(pod 中有多个容器的情况下)
kubectl top pod POD_NAME --containers # 显示指定 pod和容器的指标度量


调度配置
$ kubectl cordon k8s-node # 标记 my-node 不可调度
$ kubectl drain k8s-node # 清空 my-node 以待维护
$ kubectl uncordon k8s-node # 标记 my-node 可调度
$ kubectl top node k8s-node # 显示 my-node 的指标度量
$ kubectl cluster-info dump # 将当前集群状态输出到 stdout
$ kubectl cluster-info dump --output-directory=/path/to/cluster-state # 将当前集群状态输出到 /path/to/cluster-state
#如果该键和影响的污点(taint)已存在,则使用指定的值替换
$ kubectl taint nodes foo dedicated=special-user:NoSchedule


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK