centos steam8 部署k8s
kubernetes搭建
文章目录
- kubernetes搭建
- @[toc]
- 准备工作(三节点)
- 安装docker(三节点)
- 安装cri-dockerd(三节点)
- 添加阿里云软件源(三节点)
- 安装kubeadm、kubelet、kubectl(三节点)
- 初始化master节点
- 加入node节点
- 安装网络插件(master)
- 测试集群(master)
- 部署Dashboard(master)
文章目录
- kubernetes搭建
- @[toc]
- 准备工作(三节点)
- 安装docker(三节点)
- 安装cri-dockerd(三节点)
- 添加阿里云软件源(三节点)
- 安装kubeadm、kubelet、kubectl(三节点)
- 初始化master节点
- 加入node节点
- 安装网络插件(master)
- 测试集群(master)
- 部署Dashboard(master)
准备工作(三节点)
关闭防火墙
systemctl disable --now firewalls
vi /etc/selinux/config
enabled改成disable
永久关闭swap功能并重启
swapoff -a
free -h
[root@master ~]# sed -ri 's/.*swap.*/#&/' /etc/fstab
[root@master ~]# 添加三台的主机IP地址映射
将桥接的ipv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> EOF
sysctl --system
时间同步
[root@master ~]# mv /etc/yum.repos.d/* /media/
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
dnf -y install chrony
vi /etc/chronyd.conf
pool time1.aliyun.co iburst
systemctl enable --now chronyd
配置密钥**(主节点)**
ssh-keygen -t rsa
ssh-copy-id master(IP)
ssh-copy-id node1(IP)
ssh-copy-id node2(IP)
安装docker(三节点)
yum install -y yum-utils vim bash-com*
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
service docker start
docker version
配置镜像加速器
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
安装cri-dockerd(三节点)
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.2/cri-dockerd-0.3.2-3.el7.x86_64.rpm
rpm -ivh cri-dockerd-0.3.2-3.el7.x86_64.rpm
vi /usr/lib/systemd/system/cri-docker.service
删除这行的代码写入这个代码 ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
systemctl daemon-reload
systemctl enable cri-docker && systemctl start cri-docker
添加阿里云软件源(三节点)
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装kubeadm、kubelet、kubectl(三节点)
yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0
systemctl enable kubelet
初始化master节点
kubeadm init \
--apiserver-advertise-address=192.168.100.31 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.28.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket=unix:///var/run/cri-dockerd.sock \
--ignore-preflight-errors=all
--apiserver-advertise-address 集群通告地址
--image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
--kubernetes-version K8s版本,与上面安装的一致
--service-cidr 集群内部虚拟网络,Pod统一访问入口
--pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致
--cri-socket 指定cri-dockerd接口,如果是containerd则使用--cri-socket unix:///run/containerd/containerd.sock
-
初始化完成后,最后会输出一个join命令,先保存,后面从节点加入集群会用到
-
如果没有保存也可以用kubeadm token create --print-join-command命令重新生成token
接着、拷贝kubectl使用的连接ks认证文件到默认路径
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
此时就可以使用kubectl工具管理k8s集群了、列入查看工作节点
kubectl get nodes
节点状态为NotReady,是因为没有安装网络插件,后买你节点加入后会安装部署
加入node节点
在node节点执行主节点初始化时生成的join语句,一下就代表节点已经加入集群
[root@k8s-node2 ~]# kubeadm join 192.168.124.222:6443 --token 9k6b0f.qxgcphu3a0vojhj5 --discovery-token-ca-cert-hash sha256:a08e6f0de63297aa1a88563db346a4150d4e607ab3a9c64d44dccb59b2ea9083
Found multiple CRI endpoints on the host. Please define which one do you wish to use by setting the 'criSocket' field in the kubeadm configuration file: unix:///var/run/containerd/containerd.sock, unix:///var/run/cri-dockerd.sock
To see the stack trace of this error execute with --v=5 or higher
解决方法:这是表示在主机上找到多个CRI端口,可能是系统上运行了多个容器containerd或Docker。可以在join语句后面添加--cri-socket=unix:///var/run/containerd/containerd.sock或者--cri-socket=unix:///var/run/cri-dockerd.sock来指定容器执行命令
安装网络插件(master)
- 1、从官网撒谎给你下载按爪给你Calico插件所需的配置文件
wget https://docs.projectcalico.org/manifests/calico.yaml
-
2.修改配置文件,将CALICO_IPV4POOL_CIDR值设置为之前指定的地址
-
- name: CALICO_IPV4POOL_CIDR - value: "10.244.0.0/16"
-
-
3、插件部署
-
kubectl apply -f calico.yaml
-
4、查看名称空间kube-system下所有的pod
kubectl get pods -n kube-system
可以发现大部分组件都是以pod的形式运行的
- 5、进一步查看calico插件在各节点上的部署情况
kubectl get pods -A -o wide | grep calico
测试集群(master)
1、创建一个简单的deployment以运行nginx
kubectl create deployment nginx --image=nginx:1.8.1
2、将改deployment发布为service一共外部访问
kubectl expose deployment nginx --port=80 --type=NodePort
3、查看pod和service是否正常运行
kubectl get,svc
部署Dashboard(master)
-
Dashboard是官方提供的一个UI,可用于基本管理K8s资源
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
- 修改配置文件暴露服务
- type:NodePort
- nodePort: 30005
- 修改配置文件暴露服务
-
应用文件
- kubectl apply -f recommended.yaml
-
访问地址:https://master节点IP:30005
-
创建service account并绑定默认cluster-admin管理员集群角色
-
- \# 创建用户 kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard \# 用户授权 kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin - \# 获取用户Token,每次使用都会新生成Token,之前生成的Token会作废 kubectl create token dashboard-admin -n kubernetes-dashboard
-