前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes

Kubernetes

原创
作者头像
独孤云翔
修改2021-03-08 14:20:54
7010
修改2021-03-08 14:20:54
举报
文章被收录于专栏:Note_Kubenetes

systemctl status docker

告警提示:

level=warning msg="Your kernel does not support cgroup rt runtime

apt install kubelet=1.18.2-00 kubeadm=1.18.2-00 kubectl=1.18.2-00 -y

To start using your cluster, you need to run the following as a regular user:

mkdir -p $HOME/.kube

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

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

You should now deploy a pod network to the cluster.

Run "kubectl apply -f podnetwork.yaml" with one of the options listed at:

https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.250.101.60:6443 --token dh2qiz.dx4zqwyc3d3vywpu \

--discovery-token-ca-cert-hash sha256:c7d2044ddae029968d3aa0f1045b641667589bca330b0d2965ce74521881d722

Kubernetes-集群扩容增加node节点

最近Kubernetes集群的负载很高,为了减轻负载压力,打算新增节点进行集群扩容,具体方法如下。

1.将新节点加入集群,命令如下

kubeadm join --token TOKEN 10.3.14.193:6443 --discovery-token-ca-cert-hash sha256:SHA256

这里有两个参数,一个是TOKEN,一个是Kubernetes认证的SHA256加密字符串,TOKEN可以通过如下命令查看

kubeadm token list

每个token只有24小时的有效期,如果没有有效的token,可以使用如下命令创建

kubeadm token create

token创建出来了,那么还有一个问题,我怎么知道Kubernetes认证的SHA256加密字符串是多少,这里可以使用这个命令查看到

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

然后就可以使用上面的命令将新节点加入集群了

最后使用如下命令就可以查看集群内所有节点了

kubectl get nodes

但是现在如果在新加的节点上执行kubectl命令,会出现错误【The connection to the server localhost:8080 was refused - did you specify the right host or port?】

K8s物理机维护

step1:将要维护的物理机标记为污点,不可调度

kubectl cordon node1

step2: 将需要维护的物理机上的pod赶走

kubectl drain node1

备注:提示将删除本地pod,不具有高可用的pod

kubectl drain node1 --ignore-daemonsets --delete-local-data --force

step3:维护完成后需将node1标记为可调度

kubectl uncordon node1

2、修改默认进入的namespace

kubectl config set-context --current --namespace=project1

vim ~/.kube/config 修改namespace项

3、配置kubectl命令补全

sudo apt-get install bash-completion

source <(kubectl completion bash)

echo “source <(kubectl completion bash)” >> ~/.bashrc

source ~/.bashrc

4、访问pod

kubectl exec -it web-nginx -- /bin/bash

#当pod中包含多个container,默认访问第一个主container

kubectl exec -it 3in1 -c web-c1 -- /bin/bash

静态POD

kubelet服务管理

etcd

api-server

controller-manmager

scheduler

kube-proxy

重启kubelet服务,所有静态POD将重启

kubelet服务会动态加载/etc/kubernetes/mainifests下的配置文件

K8s高可用

k8s中保证Pod的高可用,必须使用DC部署pod,除dc外,RS,RC,DS,statefull-set

deployments:保证pod高可用,时刻关注多副本运行,运行多副本,可用手动scale pod副本数

daemonsets:监控pod运行状态,保证时刻都有期望的pod副本在运行,运行多pod副本,特点:要求同一个ds部署出来的pod运行在不同节点,保证所有node至少运行一个pod,无需指定副本数,副本数等于节点数。

replicasets=deployments=replicationcontrollers#功能一样

trnuser@k8s:~/pod$ kubectl get pods -n kube-system

NAME READY STATUS RESTARTS AGE

calico-kube-controllers-59877c7fb4-lgf4z 1/1 Running 0 23h

calico-node-8rt4m 1/1 Running 0 23h

calico-node-b4wgq 1/1 Running 0 23h

calico-node-gjqwf 1/1 Running 0 23h

calico-node-mdh22 1/1 Running 0 23h

coredns-7ff77c879f-nvq2b 1/1 Running 0 23h

coredns-7ff77c879f-rwwmm 1/1 Running 0 23h

etcd-k8s 1/1 Running 0 23h

kube-apiserver-k8s 1/1 Running 0 23h

kube-controller-manager-k8s 1/1 Running 0 23h

kube-proxy-45h2v 1/1 Running 0 23h

kube-proxy-gd6gz 1/1 Running 0 23h

kube-proxy-rwzg9 1/1 Running 0 23h

kube-proxy-wjbv5 1/1 Running 0 23h

kube-scheduler-k8s 1/1 Running 0 23h

metrics-server-7f96bbcc66-h74z6 1/1 Running 0 22h

dc高可用,关闭node节点后5分钟后重新部署

kubectl describe pod dc1-97b97994f-pxgf7

Deployment创建应用程序实例后,Kubernetes Deployment 控制器会持续监视这些实例。 如果托管实例的节点关闭或被删除,则 Deployment 控制器会将该实例替换为群集中另一个节点上的实例。

获取kubernetes资源

kubectl api-resources

查看使用文档

kubectl explain deploy.spec.strategy

修改docker、kubelet、etcd工作目录

docker-ce=19.03.13~centos 和 kubernetes=1.16.2 版本为例介绍

docker-ce的默认工作目录是/var/lib/docker,会存放docker镜像文件、容器日志及写到容器临时目录的文件等。

kubelet的默认工作目录是/var/lib/kubelet,会存放volume文件(包括emptyDir volume)、plugin文件等。

这实际存在一个风险:大量的镜像文件或容器日志等,可能把操作系统根分区容量占满,进而导致系统crash或k8s pod被频繁驱逐等异常发生。

我们在生产环境上,往往需要更改docker和kubelet的工作目录,将其改到另外一块数据盘的文件系统上,例如下文中的“/mnt/data”目录。

修改docker工作目录

修改  vim /usr/lib/systemd/system/docker.service启动文件,添加  --graph=/data/docker

ExecStart=/usr/bin/dockerd --graph=/data/docker -H fd:// --containerd=/run/containerd/containerd.sock

重启docker

systemctl daemon-reload

systemctl restart docker

修改kubelet工作目录

根据  /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf  加载文件,只需要修改 /etc/sysconfig/kubelet 即可。

KUBELET_EXTRA_ARGS="--root-dir=/data/k8s/kubelet"

此时config.yaml文件还是在/var/lib/kubelet下,需要修改为 :  /data/k8s/kubelet

将  vim 文件中 /var/lib/kubelet 改为 /data/k8s/kubelet

Environment="KUBELET_CONFIG_ARGS=--config=/data/k8s/kubelet/config.yaml"

EnvironmentFile=-/data/k8s/kubelet/kubeadm-flags.env

移动数据到 /data/k8s/kubelet

mkdir -p /data/k8s/kubelet

mv /var/lib/kubelet/* /data/k8s/kubelet

cp -rp /data/k8s/kubelet/pki/ /var/lib/kubelet/ ##后面可能会报 证书路径问题,故将证书拷贝回原路径

重启kubelet

systemctl daemon-reload

systemctl restart kubelet

 修改etcd数据目录

使用kubeadm搭建的k8s集群,默认etcd的数据目录为 /var/lib/etcd 。

集群运行一段时间后, 发现在系统硬盘上的etcd即占空间,又影响速度。所以将其数据目录迁移到ssd中。

注意

修改配置文件后,etcd会自动重启,并且导致对应机器的kubectl不可用。

所以请一台一台修改,etcd leader 节点放到最后操作,并且确保其他机器的kubectl可用。

vim /etc/kubernetes/manifests/etcd.yaml

翻到最下方,编辑hostPath

volumes:

  • hostPath: path: /etc/kubernetes/pki/etcd type: DirectoryOrCreate name: etcd-certs
  • hostPath: path: /data/k8s/etcd # 将这个路径改为你要更改到的路径 type: DirectoryOrCreate name: etcd-data

注意,这里不要修改command中的–data-dir。 command中的选项是控制容器中的数据目录,我们只需要改变hostpath就可以了。

修改完成后,etcd会自动重启,使用其他master查看etcd状态。

这里etcd起不来是正常的,需要执行一下几步:

删除etcd的pod,删除后pod会从列表中消失,这是正常现象

需把etcd的要把/var/lib/etcd/* 拷贝到更改后的目录

重启物理机的kubelet

查看状态

以上4步做完之后,etcd应该已经起来了。 注意,这里一定要先修改配置文件,在拷贝etcd数据

使用kubectl ecex 到一个etcd节点中, 查看etcd状态,一定要等节点状态全部健康后,在继续操作其他节点

Nginx容器镜像

kubectl exet -it web1 -- /bin/bash

nginx -t

检查配置文件

nginx -s reload

重新载入配置文件

nginx -s reopen

重启nginx

nginx -s stop

停止nginx

配置文件

/etc/nginx/config

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 翻到最下方,编辑hostPath
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档