赞
踩
https://youdianzhishi.com/web/course/1004/1019
https://www.qikqiak.com/post/manual-install-high-available-kubernetes-cluster/
角色 | IP |
---|---|
master | 172.25.250.100 |
node1 | 172.25.250.101 |
node2 | 172.25.250.102 |
关闭防火墙:firewalld与iptables互斥。一个是白名单一个是黑名单,k8s使用了iptables做流量转发,所以关闭。
systemctl stop firewalld.service
systemctl disable firewalld.service
关闭selinux: #用来加强安全性的一个组件,但非常容易出错难以定位,一般装完系统就先禁用了
sudo setenforce 0 #临时关闭
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
关闭swap分区:#当内存不足时,linux会自动使用swap,将部分数据存储放到磁盘中,这样会使性能下降,为了性能考虑推荐关掉
swapoff -a
vim /etc/fstab #注释掉swap
设置主机名:
hostnamectl set-hostname <hostname>
在master添加hosts: #在master上执行,方便master与其他主机通信
[root@master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.250.100 master
172.25.250.101 node1
172.25.250.102 node2
允许 iptables 检查桥接流量:#确保 br_netfilter
模块被加载,为了让Linux 节点上的 iptables 能够正确地查看桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
时间同步:(k8s涉及证书,证书对时间很敏感)
yum install -y chrony
chronyc sources -v time.windows.com
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
systemctl enable docker && systemctl start docker
配置镜像加速器:(此处代码可能复制不了,手打或者去阿里云控制台复制)
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://mcxfjzdt.mirror.aliyuncs.com"]
}
EOF
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装1.23.0版本的k8s客户端
yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
systemctl enable kubelet #此时不能启动,因为k8s还没有对应的配置文件,在初始化时才会生成
将docker的启动引擎cgroupfs驱动改为修改为systemd与kuberlet一致: (docker默认cgroup的驱动是cgroupfs,而k8s的cgroup驱动是systemd,k8s只是一个平台,需要与容器引擎驱动一致)
"exec-opts": ["native.cgroupdriver=systemd"]
重启docker让配置文件生效:
systemctl daemon-reload
systemctl restart docker
初始化master节点的k8s上执行: (初始化也叫清空格式化集群配置)
kubeadm init --apiserver-advertise-address 172.25.250.10 --pod-network-cidr 10.244.0.0/16 --service-cidr 10.245.0.0/16 --kubernetes-version v1.23.0 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers
然后执行:
根据提示普通用户执行:
mkdir -p $HOME/.kube #创建一个家目录
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config #拷贝一个文件到家目录里(该文件相当于管理员文件,拥有此文件即可使用kubectl)
sudo chown $(id -u):$(id -g) $HOME/.kube/config #给文件赋予一个权限,
如果是root用户也可以执行:
export KUBECONFIG=/etc/kubernetes/admin.conf #整体设置一个环境变量
2种方式都是为了连接k8s集群
补充: k8s初始化做了哪些工作???
[preflight] 环境检查和拉取master节点所需镜像
[certs] 创建证书目录/etc/kubernetes/pki,并生成证书
[kubeconfig] 创建连接apiserver的配置文件目录/etc/kubernetes
[kubelet-start] 生成k8s配置文件/var/lib/kubelet/kubeadm-flags.env 和启动k8s,前面没有启动就是这原因,如果没有此文件是启动不了的
[control-plane] 使用静态pod启动master组件/etc/kubernetes/manifests
[upload-config] [kubelet] [upload-certs] 使用ConfigMap存储k8s配置文件,上传配置文件,上传组件
[mark-control-plane] 给master节点添加标签
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CH27D8TX-1648302711356)(file:///C:\Users\86173\AppData\Roaming\Tencent\Users\2022678574\QQ\WinTemp\RichOle{%YY5HUJS7CC14E5`3ZO7SD.png)]
[bootstrap-token] k8s自动生成证书机制
[addons] 安装插件CoreDNS、kube-proxy
在所有node上执行:
kubeadm join <token*****>
node做了哪些事???
node在加入master时自动拉取master中需要的2个组件镜像
部署calico组件:
curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O
修改yaml文件:ip改为master节点初始化pod网络相同的网段
......
4219 # The default IPv4 pool to create on startup if none exists. Pod IPs will be
4220 # chosen from this range. Changing this value after installation will have
4221 # no effect. This should fall within `--cluster-cidr`.
4222 # - name: CALICO_IPV4POOL_CIDR
4223 #看这行 value: "10.244.0.0/16"
4224 # Disable file logging so `kubectl logs` works.
4225 - name: CALICO_DISABLE_FILE_LOGGING
4226 value: "true"
4227 # Set Felix endpoint to host default action to ACCEPT.
4228 - name: FELIX_DEFAULTENDPOINTTOHOSTACTION
4229 value: "ACCEPT"
......
kubectl apply -f calico.yaml
命令行部署一个deployment下一个web服务
kubectl create deployment web --image=nginx
查看连通信
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2lttQfIa-1648302711357)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20220302204710535.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gpEKKb1n-1648302711357)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20220302204739445.png)]
查看service网络能否通信
kubectl expose deployment web --port 80 --target-port 80 --type NodePort
通过浏览器访问:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1GojHDKa-1648302711358)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20220302205003472.png)]
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml #无法下载可以使用迅雷下载到win10拖进去
默认Dashboard只能集群内部访问,修改service为NodePort类型,暴露到外部
32 kind: Service 33 apiVersion: v1 34 metadata: 35 labels: 36 k8s-app: kubernetes-dashboard 37 name: kubernetes-dashboard 38 namespace: kubernetes-dashboard 39 spec: <u>**40**</u> **<u>type: NodePort</u>** 41 ports: 42 - port: 443 43 targetPort: 8443 **<u>44</u>** **<u>nodePort: 30001</u>** 45 selector: 46 k8s-app: kubernetes-dashboard
发布该文件:
kubectl apply -f kubernetes-dashboard.yaml
使用浏览器访问:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZMKGkJaA-1648302711358)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20220302211544396.png)]
因为Dashboard默认使用https访问的
接着用https访问:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rpx4lGiH-1648302711358)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20220302211802483.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KxRsudOg-1648302711359)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20220302211847632.png)]
接下来使用token登录:
创建token
创建用户:kubectl create serviceaccount dashboard-admin -n kube-system
用户授权:kubectl create rolebinding dashboard-admin -n kube-system --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
获取用户token:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DBE3xQ9h-1648302711359)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20220302213735476.png)]
密码就是这个长串字母
这里建议使用国产化kuboard:
操作比较简单,也更方便使用,dashboard安装后会出现报错无法访问:
kuboard安装步骤在官网上:https://www.kuboard.cn/install/v3/install-in-k8s.html
在当前bash环境下读取并执行FileName中的命令。
*注:该命令通常用命令“.”来替代。
查看pod日志:
kubectl logs <podname> -n <namespace>
查看pod具体创建流程:
kubectl describe pod <podname>
以上两种可以在报错时可以分析具体报错问题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。