k8s安装过程笔记

参考教程:https://blog.csdn.net/weixin_57250068/article/details/123368726
https://blog.csdn.net/kity9420/article/details/123674582

1.系统准备

我用了两台虚拟机,一个作为云(master),一个作为端(slave)。

1.1 修改主机名及映射(全部节点)

vi /etc/hostname

vi 的使用:i 键进入编辑模式,esc退出编辑模式,输入“:q!“不保存强制退出,输入“:wq”,保存退出vim参考链接
master主机从ubuntu改为master,slave同理
在这里插入图片描述
查看ip地址

ifconfig

在这里插入图片描述
修改映射,在最后添加ip地址和主机名

vi /etc/hosts

在这里插入图片描述
其他参考:关于IP地址与主机名映射的/etc/hosts文件配置

1.2 配置免密登录(SSH)

先看有没有安装sshd服务

ps -e |grep ssh

如果输入命令后只显示了一个ssh,则说明你没有安装sshd服务。
在这里插入图片描述
安装ssh:

sudo apt-get install openssh-server

在用户主目录下,进入.ssh文件夹

cd ~
cd .ssh

若是没有ssh文件(有则跳过这一步)
在这里插入图片描述
输入ssh localhost命令,第三个红框输入密码
在这里插入图片描述
现在有了ssh文件,生成密钥,输入

ssh-keygen -t rsa

在这里插入图片描述
发放其他主机,输入

ssh-copy-id 主机名(我的master主机对应slave)

在这里插入图片描述
验证:ssh slave,可以看到master主机可以登录到slave主机上
在这里插入图片描述
参考链接:ssh: connect to host localhost port 22: Connection refused的解决方案

1.3 关闭 swap 内存

执行如下命令关闭swap内存

sudo swapoff -a

安装docker

安装

sudo apt install docker.io

查看安装是否成功/查看docker版本

docker --version

配置

kubernetes默认设置cgroup驱动(cgroupdriver)为"systemd",而docker服务的cgroup驱动默认为"cgroupfs",建议将其修改为"systemd",与kubernetes保持一致,可以通过修改docker的/etc/docker/daemon.js文件进行设置

mkdir /etc/docker 或者 cd /etc/docker/
cat <<EOF> /etc/docker/daemon.json
 
{
    
    
 
"exec-opts": ["native.cgroupdriver=systemd"],
 
"registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]
 
}
 
EOF​

在这里插入图片描述
启动Docker服务并激活开机启动:

systemctl start docker
 
systemctl enable docker

3 安装kubeadm、kubectl以及kubelet

安装完了 docker 就可以下载 k8s 的三个主要组件kubelet、kubeadm以及kubectl。这一步两台主机都需要进行安装。先来简单介绍一下这三者
kubelet: k8s 的核心服务
kubeadm: 这个是用于快速安装 k8s 的一个集成工具,我们在master1和worker1上的 k8s 部署都将使用它来完成。
kubectl: k8s 的命令行工具,部署完成之后后续的操作都要用它来执行

apt-get update && apt-get install -y apt-transport-https
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 kubelet=1.18.0-00 kubeadm=1.18.0-00 kubectl=1.18.0-00

下载镜像

查询需要下载的镜像

kubeadm config images list --kubernetes-version v1.18.0

在这里插入图片描述
下载镜像

kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers

复制改名(可以跳过)

docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.18.0 k8s.gcr.io/kube-apiserver:v1.18.0
docker tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.18.0 k8s.gcr.io/kube-controller-manager:v1.18.0
docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.18.0 k8s.gcr.io/kube-scheduler:v1.18.0
docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.18.0 k8s.gcr.io/kube-proxy:v1.18.0
docker tag registry.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
docker tag registry.aliyuncs.com/google_containers/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
docker tag registry.aliyuncs.com/google_containers/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7

删除多余镜像(要是上一个没做,这个必须跳过)

docker rmi registry.aliyuncs.com/google_containers/etcd:3.4.3-0
docker rmi registry.aliyuncs.com/google_containers/coredns:1.6.7
docker rmi registry.aliyuncs.com/google_containers/pause:3.2
docker rmi registry.aliyuncs.com/google_containers/kube-scheduler:v1.18.20
docker rmi registry.aliyuncs.com/google_containers/kube-controller-manager:v1.18.20
docker rmi registry.aliyuncs.com/google_containers/kube-apiserver:v1.18.20
docker rmi registry.aliyuncs.com/google_containers/kube-proxy:v1.18.20

下载完成后,通过docker images就可以在本地查看镜像

docker images

在这里插入图片描述

配置云节点

kubeadm init --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=192.168.0.0/16 --kubernetes-version=v1.18.0

配置项说明:

  • –apiserver-advertise-address k8s 中服务apiserver的部署地址,如果不填写,默认是本机
  • –image-repository 拉取的 docker 镜像源,因为初始化的时候kubeadm会去拉 k8s 的很多组件来进行部署,所以需要指定国内镜像源,下不然会拉取不到镜像
  • –pod-network-cidr k8s 采用的节点网络,因为我们将要使用flannel作为 k8s 的网络,所以这里填192.168.0.0/16就好(因为我的master IP地址是192.168.XXX.XXX,ifconfig命令查看ip)
  • –kubernetes-version: 这个是用来指定你要部署的 k8s 版本的,一般不用填,不过如果初始化过程中出现了因为版本不对导致的安装错误的话,可以用这个参数手动指定

安装需要一会,等待成功后,在最后会看到如下信息

Your Kubernetes control-plane has initialized successfully!

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 192.168.62.129:6443 --token paua0a.yeygd3v81lovxn2a \
    --discovery-token-ca-cert-hash sha256:e146ea71fa645698e4da8370ab34ee52fefc5fb7d4fa082b168ec93465607356 

其中,最后两行消息十分重要
设置配置文件如下

mkdir -p /root/.kube
 
cp -i /etc/kubernetes/admin.conf /root/.kube/config
 
chown root:root /root/.kube/config

如果忘记token,则用如下命令查看

kubeadm token list

加入端节点

在子节点执行 kubeadm init 初始化的命令

kubeadm init

若出现端口被占用等问题,重置

kubeadm reset

加入集群,输入云节点的最后两行

kubeadm join 192.168.62.129:6443 --token paua0a.yeygd3v81lovxn2a \
    --discovery-token-ca-cert-hash sha256:e146ea71fa645698e4da8370ab34ee52fefc5fb7d4fa082b168ec93465607356 

设置完成后,可以使用kubectl命令行工具对kubernetes集群进行访问和操作了

# 查看已加入的节点
kubectl get nodes
# 查看集群状态
kubectl get cs

在这里插入图片描述

部署网络,自动拥有flanner网络服务

可以看到上面的master和slave都是NotReady状态,为了让它Ready,安装Pod网络插件(一般都是CNI)
Pod的网络插件有很多种,参见官方文档。本文选择部署Flannel网络插件,让Pod内部服务之间可以相互通讯。在master上

第一种,可以直接安装的办法

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

第二种,如果上一步如果卡住, 可以把文件下载到本地
然后在下载的文件夹下执行(root执行)

kubectl apply -f kube-flannel.yml

执行结果:
podsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created

再次查看已加入节点

kubectl get node

在这里插入图片描述

安装Dashboard插件

上面所有的操作,我们都是通过命令行来执行的,对整个集群没有一个整体的认识,操作起来也不便利。此时,我们需要一个可视化的操作界面,来改善这个问题:Dashboard插件。

Kubernetes Dashboard 是用于 Kubernetes 集群的通用、基于 Web 的 UI。 它允许用户管理集群中运行的应用程序并对其进行故障排除,以及管理集群本身。它需要去master节点上安装。

跟上面一样,如果可以直接下载

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml

不能直接下载就先用能联网的机器下载,然后发送到需要安装的机器上
这里我们多做一步:由于默认Dashboard只能集群内部访问,使用默认配置安装的dashboard插件,只允许我们通过集群local master主机的浏览器来访问集群的UI,对我们来说太不方便了。因此修改Service为NodePort类型,让UI暴露到集群外部可以访问

vi recommended.yaml 或者 gedit recommended.yaml

添加两行配置

kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort ---- 添加一行
ports:
- port: 443
targetPort: 8443
nodePort: 30001 ---- 添加一行
selector:
k8s-app: kubernetes-dashboard

再次安装

kubectl apply -f recommended.yaml

在这里插入图片描述
查看pod中是否有dashboard

kubectl get pods --all-namespaces

最下面两行,dashbaord有了。查看dashboard信息

NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-7ff77c879f-vh6qr 0/1 ContainerCreating 0 36m
kube-system coredns-7ff77c879f-xx4qr 0/1 ContainerCreating 0 36m
kube-system etcd-master 1/1 Running 0 36m
kube-system kube-apiserver-master 1/1 Running 0 36m
kube-system kube-controller-manager-master 1/1 Running 0 36m
kube-system kube-flannel-ds-szg68 0/1 CrashLoopBackOff 6 6m48s
kube-system kube-flannel-ds-v4fqm 0/1 CrashLoopBackOff 6 6m48s
kube-system kube-proxy-wcnn7 1/1 Running 0 23m
kube-system kube-proxy-zxm6d 1/1 Running 0 36m
kube-system kube-scheduler-master 1/1 Running 0 36m
kubernetes-dashboard dashboard-metrics-scraper-55bc59dffc-8rwvx 0/1 ContainerCreating 0 6m12s
kubernetes-dashboard kubernetes-dashboard-5c6dff6c6f-s8hbz 0/1 ContainerCreating 0 6m12s

猜你喜欢

转载自blog.csdn.net/weixin_45937957/article/details/125622734