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
volumes:
注意,这里不要修改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 删除。