# kubernetes-basic **Repository Path**: xz2000/kubernetes-basic ## Basic Information - **Project Name**: kubernetes-basic - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-04-15 - **Last Updated**: 2023-03-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # K8s安装教程 本教程基于Kubernetes 1.25版本。__该版本Kubernetes默认不支持Docker作为运行时,本教程使用containerd作为运行时。__ ## 配置说明 - `node only`仅需对node配置。 - `master only`仅需对master配置。 - `optional`可选项。 - 默认为必须配置。 - 本项目提供的二进制包默认均为`linux-amd-64`版本,本项目中提供的配置文件中的镜像默认均为`中国大陆`镜像版本。 ## 1、配置用户 - (master only)对于master节点,尽量不使用root用户,使用如下命令创建非root用户: ``` adduser xxx ``` 其中`xxx`为用户名,之后: ``` sudo vi /etc/sudoers ``` 将`xxx ALL(ALL:ALL) ALL`加入文件。 - (node only)若node是非root用户,则通过如下的命令创建root,并配置好ssh: ```shell sudo passwd root ``` 之后,修改一下ssh策略: ``` sudo vi /etc/ssh/sshd_config ``` 把`PermitRootLogin`改成`yes`。 ## 2、安装containerd Kubernetes支持多种运行时,推荐安装containerd作为运行时。由于Docker Engine在Kubernetes 1.24中被弃用,故使用containerd作为Runtime。 首先,进行初始配置: ```shell cat < /dev/null sudo apt update sudo apt -y install containerd.io ``` 配置containerd: ```shell sudo mkdir -p /etc/containerd cat containerd_config.toml | sudo tee /etc/containerd/config.toml ``` 重新启动containerd: ```shell sudo systemctl daemon-reload sudo systemctl restart containerd ``` 关闭交换分区: ```shell sudo swapoff -a && sudo sed -ri 's/.*swap.*/#&/' /etc/fstab ``` ## 3、安装Kubernetes 允许iptables检查桥接流量:(master&node) ```shell cat < --print-join-command --ttl=0 ``` 为了检验Node节点是否已经正常加入集群,您可以在`master`节点通过如下方式查看: ```sh kubectl get no -o wide ``` 如果所有节点都出现在列表中,且`STATUS`一栏显示为`Ready`,则表示加入成功。否则,请等待5分钟左右再重试。如果仍然没有安装成功,请检查网络配置是否正确,并且尝试使用`kubectl get po -n kube-system`检查基础镜像是否正常运行。 (Optional) 如果遇到NotReady的情况,但calico-node全部正常,可以尝试在node节点重启containerd服务,或者重启node节点。 __至此,Kubernetes已经全部安装完成!请注意,为了扩展Kubernetes集群的功能,推荐继续安装如下的工具。__ ## (Optional, Master Only) 安装Helm `Helm`是Kubernetes中的包管理工具,本仓库中提供了v3.10.1版本的helm安装包(linux-amd64),可以直接安装: ```sh sudo install helm-linux-amd64/helm /usr/local/bin ``` ## (Optional, Master Only) 安装OpenEBS LocalPV OpenEBS LocalPV可被用于自动创建并分配PV,本项目提供了国内镜像源的openebs(v2.0.0)的安装文件,可以直接安装: ```sh kubectl apply -f openebs-operator.yaml ``` ## (Optional, Master Only) 安装metrics-server `metrics-server`被用于导出节点的运行状态信息,安装后可以使用`kubectl top node xxx`命令查看节点的CPU占用、内存占用情况,本项目提供了v0.6.1版本的国内镜像: ```sh kubectl apply -f metrics-server.yaml ``` ## (Optional, Master Only) 安装buildkit 由于服务器集群中未安装Docker,如果您需要在服务器编译Docker镜像,需要使用`buildkit`,本项目提供了v0.10.6版本的安装包, ```sh sudo install buildkit/* /usr/local/bin/ ``` 由于buildkit需要使用`buildkitd`作为后台服务,应当将其加载到`systemd`启动项中: ```sh sudo cp buildkit-systemd/* /lib/systemd/system/ \ && sudo systemctl start buildkit \ && sudo systemctl status buildkit ``` 如果最后一行命令的输出显示`active (running)`,那么buildkit就安装成功了。 ## (Optional, Master Only) 安装istio __安装前,请确保集群中存在至少一个可以运行Pod的Node,否则安装过程会卡死!__ `istio`是服务网格工具,可被用于流量管理、流量监控、故障注入等多种场景,本项目提供了istio的v1.15.3版本。 首先,通过如下命令安装`istioctl`工具: ```sh sudo install istio/bin/istioctl /usr/local/bin/ ``` 我们使用demo作为配置文件即可: ```sh istioctl install --set profile=demo -y ``` 添加如下的标记,以自动注入Envoy sidecar代理: ```sh kubectl label namespace default istio-injection=enabled ``` ## (Optional, Master Only) 安装chaos-mesh `chaos-mesh`是testbed中常用的故障注入工具。 (需要网络连接) 参考:https://chaos-mesh.org/zh/docs/production-installation-using-helm/。 ``` helm repo add chaos-mesh https://charts.chaos-mesh.org helm search repo chaos-mesh kubectl create ns chaos-mesh helm install chaos-mesh chaos-mesh/chaos-mesh -n=chaos-mesh --set chaosDaemon.runtime=containerd --set chaosDaemon.socketPath=/run/containerd/containerd.sock --set dashboard.securityMode=false ``` # (已过期,仅供参考) Legacy Version ## 1、安装containerd Kubernetes支持多种运行时,推荐安装containerd作为运行时。 由于Docker Engine在Kubernetes 1.24中被弃用,故使用containerd作为Runtime。 首先,进行初始配置: ```shell cat < /dev/null sudo apt update sudo apt -y install containerd.io ``` 配置containerd: ```shell sudo mkdir -p /etc/containerd cat containerd_config.toml | sudo tee /etc/containerd/config.toml ``` 重新启动containerd: ```shell sudo systemctl daemon-reload sudo systemctl restart containerd ``` 关闭交换分区: ```shell sudo swapoff -a && sudo sed -ri 's/.*swap.*/#&/' /etc/fstab ``` ## 1B、安装Docker (Deprecated) __请注意,Dockershim已于Kubernetes 1.24版本被弃用。若已安装containerd,请跳过此步骤。__ 选择腾讯云Ubuntu 20.04镜像,安装Docker(master&node) ```shell sudo apt-get update sudo apt-get -y install \ ca-certificates \ curl \ gnupg \ lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update sudo apt-get -y install docker-ce docker-ce-cli containerd.io ``` 配置Docker守护程序:(master&node) ```shell sudo mkdir /etc/docker cat </etc/apt/sources.list.d/kubernetes.list deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main EOF ``` 之后退出su刷新并安装工具: ```shell exit sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl ``` 若使用containerd,其它修改可参见:https://yeasy.gitbook.io/docker_practice/setup/kubeadm#an-zhuang-containerd ## 3、初始化控制平面 初始化K8s master控制平面: ```shell sudo kubeadm init \ --image-repository registry.aliyuncs.com/google_containers \ --pod-network-cidr=192.168.0.0/16 ``` 务必记录下显示的node访问命令,像下面这样: ```shell kubeadm join 192.168.65.241:6443 --token g2jebx.wgjaa74axmlr245u \ --discovery-token-ca-cert-hash sha256:95041faac4e9748025680ed51f905e6417df88cc1edd7f50ea13134a17141e8d ``` 使用非root账户访问kubectl: ```shell mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` 安装calico网络插件: ```shell curl https://docs.projectcalico.org/manifests/calico.yaml -O kubectl apply -f calico.yaml ``` 等待5分钟左右,检查运行状态: ``` kubectl get pods --all-namespaces ``` 如果STATUS全部为Running,则代表部署成功。如果仍有Pending或Init,则仍需等待一会儿。 # 4、创建node ```shell sudo passwd root ``` 之后,修改一下ssh策略: ``` sudo vi /etc/ssh/sshd_config ``` 把`PermitRootLogin`改成`yes`。 之后安装k8s,然后使用之前的命令加入集群。 如果说忘记了token,可以在master重新生成: ```sh kubeadm token generate kubeadm token create --print-join-command --ttl=0 ``` # 5、其它 master运行pod: ```shell kubectl taint nodes --all node-role.kubernetes.io/master- ``` master不运行pod: ```shell kubectl taint nodes $(hostname) node-role.kubernetes.io/master ```