部署sock-shop备忘录

清除环境

如果以前没有安装过Docker、Kubernetes及相关内容的可以略过,本章用于清除原有的安装文件。

删除已经部署内容

kubectl get nodes #查看当前部署
kubectl get nodes -owde #查看更多当前部署的信息,包括内部ip的分配
kubectl delete nodes node-1 #删除node-1,有多的结点可以按此依次删除

先work结点后master结点进行reset操作,注意按照提示删除相关内容,随后reboot

kubeadm reset #每个node中操作

kubeadm reset

在所有服务器上删除软件

#1 -qa代表query all,| 上一条命令的输出作为小一条命令的输入,grep查找文件里符合条件的字符串
rpm -qa|grep xxx

#2 查找系统中的docker安装包
dpkg -l | grep docker
dpkg -l | grep kube*

#3 集中删除,删除后可以运行2看是否清除干净
for d in `dpkg -l|grep docker`;do apt remove --purge $d;done
for k in `dpkg -l|grep kube*`;do apt remove --purge $d;done

参考内容:

Kubernetes in Action教程002讲

如何在ubuntu 中彻底删除docker

Ubuntu 系统 dpkg 命令使用详解



准备工作

服务器命名

#分别对服务器按照主节点和工作节点命名
hostnamectl set-hostname master
或 hostnamectl set-hostname node1

#查看服务器名称
hostname

修改host

#在主结点和工作结点分别修改hosts文件,使内网ip同名称对应
vim /etc/hosts
192.168.0.234 node1
192.168.0.56 master

#修改完成后可以使用ping node1或ping master来测试是否连接

关闭所有结点SELinux

(ubuntu好像没有)

参考:关闭selinux

# Centos中 所有节点关闭 SELinux
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

关闭所有结点防火墙

(云服务器中默认关闭)

systemctl stop firewalld
systemctl disable firewalld

关闭所有结点swap交换

我在华为云上通过free -m已经全是0,并且找不到fstab文件,遂没有管。

这个swap其实可以类比成 windows 上的虚拟内存,它可以让服务器在内存吃满的情况下可以保持低效运行,而不是直接卡死。但是 k8s 的较新版本都要求关闭swap

#临时关闭swap
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           7983        1129        5459          92        1394        6445
Swap:             0           0           0
[root@localhost ~]# 
swapoff -a 
free -m 
#注释掉/etc/fstab里关于SWAP文件系统的挂载信息

#永久关闭swap
sudo vi /etc/fstab
#将下列内容注释掉,随后reboot,通过top指令查看任务管理器,swap后均为0表示关闭
UUID=e2048966-750b-4795-a9a2-7b477d6681bf /   ext4    errors=remount-ro 0    1
# /dev/fd0        /media/floppy0  auto    rw,user,noauto,exec,utf8 0       0

参考:

ubuntu安装k8s

SWaP内存百度百科



Docker

安装

国内服务器建议直接按照清华镜像安装Docker进行安装。

#清除老版本
sudo apt-get remove docker docker-engine docker.io containerd runc

#更新apt并且安装部分软件
sudo apt-get update
sudo apt-get install \
	ca-certificates \
    curl \
    gnupg \
    lsb-release

#添加docker官方GPG密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

#设置库,国外的库
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

#安装docker,安装指定版本看下一条
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

	#安装指定版本,例如5:20.10.16~3-0~ubuntu-jammy,将VERSION_STRING进行更改
	apt-cache madison docker-ce
	sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io docker-compose-plugin
	

#测试是否安装正确
sudo docker run hello-world

参考:

Docker —— 从入门到实践

Install Docker Engine on Ubuntu | Docker Documentation

配置

通过修改daemon.json来修改配置

1、按需求切换到国内镜像;

2、修改cgroups。

cgroups 是Linux内核提供的一种可以限制单个进程或者多个进程所使用资源的机制,可以对 cpu,内存等资源实现精细化的控制,目前越来越火的轻量级容器 Docker 就使用了 cgroups 提供的资源限制能力来完成cpu,内存等部分的资源控制。但是k8s使用设置为systemed,为避免出现异常,我们需要将Docker也改为systemed。

sudo vi /etc/docker/daemon.json

#修改镜像及隔离程序
{
  "registry-mirrors": [
    "https://dockerhub.azk8s.cn",
    "https://reg-mirror.qiniu.com",
    "https://quay-mirror.qiniu.com"
  ],
  "exec-opts": [ "native.cgroupdriver=systemd" ]
}

#保存后重启
sudo systemctl daemon-reload
sudo systemctl restart docker

#查看docker cgroup状态,显示为systemed即可
docker info | grep Cgroup



Kubernetes

安装

K8s官网安装指南

#更新apt并使其支持ssl传输且安装相关软件
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

#下载Google Cloud public signing key
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

#添加k8s的apt库
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

#使用apt安装,第三行为指定版本安装,最新版1.24有些许改动,推荐先使用1.23版
sudo apt-get update
#sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-get install -y kubelet=1.23.1-00 kubectl=1.23.1-00 kubeadm=1.23.1-00 
sudo apt-mark hold kubelet kubeadm kubectl

国内

# 使得 apt 支持 ssl 传输
apt-get update && apt-get install -y apt-transport-https

# 下载 gpg 密钥
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 

# 添加 k8s 镜像源
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

# 更新源列表
apt-get update

# 下载 kubectl,kubeadm以及 kubelet
#apt-get install -y kubelet kubeadm kubectl
sudo apt-get install -y kubelet=1.23.1-00 kubectl=1.23.1-00 kubeadm=1.23.1-00 

参考:三.安装K8s

初始化

在主节点运行初始化,服务器网络允许也可以不添加后面的image

# 初始化集群控制台 Control plane
# 失败了可以用 kubeadm reset 重置
kubeadm init --image-repository=registry.aliyuncs.com/google_containers

成功后在最后两行出现kubeadm join命令,可以先拷贝下来

# k8s加node,忘记了重新获取:kubeadm token create --print-join-command
kubeadm join 192.168.0.56:6443 --token 457bze.urarc8t6znoul0gw \
        --discovery-token-ca-cert-hash #sha256:8eeeba9d026f37e30352cc6954da84d2aa00bb7e7c980c41ec6ab13e548df032

复制授权文件(有很多错误是由于admin.conf产生的,该文件会在init后生成)

#复制授权文件,以便 kubectl 可以有权限访问集群
#如果你其他节点需要访问集群,需要从主节点复制这个文件过去其他节点
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

在工作节点运行join命令

kubeadm join 192.168.0.56:6443 --token 457bze.urarc8t6znoul0gw \
        --discovery-token-ca-cert-hash 

安装网络插件flannel,以解决node为NotReady状态

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

最后通过kubectl get nodes查看节点状态,至此集群搭建完成。

参考:

k8s集群的搭建

kubeadm安装Kubernetes cluster

扩展:

k8s(Kubernetes)中Pod,Deployment,ReplicaSet,Service之间关系分析 : deploy控制RS,RS控制Pod,这一整套,向外提供稳定可靠的Service



Sock-shop

#拉取与安装
git clone https://github.com/microservices-demo/microservices-demo.git
cd microservices-demo/deploy/kubernetes/
kubectl create namespace sock-shop
kubectl apply -f complete-demo.yaml

#查看pod情况
get pod --namespace=sock-shop

#等所有pods准备好以后,可以尝试部署prometheus
cd /deploy/kubernetes/manifests-monitoring/
kubectl create -f 00-monitoring-ns.yaml
kubectl apply $(ls *-prometheus-*.yaml | awk ' { print " -f " $1 } ')

图片使用kubectl get pod -A查看所有pod
表示查看所有pod

参考:

Sock-shop安装教程及唐学长整理文档

github上的complete-demo.yaml



错误

the connect to the server XXX:6443 was refused

#查看docker.service状态
systemctl status docker.service

查看docker.service状态

#查看日志
journalctl -xefu kubelet 

查看kubelet日志

cgroup设置问题,上文中有提到

处理参考1

处理参考2

flannel显示为CrashLoopBackOf

部署flannel网络插件时发现flannel一直处于CrashLoopBackOff状态,查看日志提示没有分配cidrhttps://blog.csdn.net/anqixiang/article/details/107715591



k8s常用命令

#k8s查看某一pod状态
#kubectl describe pods pod的名称 -n pod所在namespace 
kubectl describe pods carts-76dd6bf8f9-vzwk8 -n sock-shop  

#查看命名空间
kubectl get namespaces

#所有pod的状态
kubectl get pods -A 

#查看k8s容器的服务清单
kubectl get pods -n ${命名空间名} -o wide

#查看pod日志
kubectl logs pod_name
kubectl log -f ${podID} -n ${命名空间名}
#将namespace从default切换到sock-shop
kubectl config set-context $(kubectl config current-context) --namespace=sock-shop

namespace操作

k8s中文文档

linux查看端口状态

posted @ 2022-08-04 12:06  toughyt  阅读(792)  评论(0编辑  收藏  举报