kubernetes1.20.+ 默认容器采用的是containerd,不是docker
| hostname | ip | |
|---|---|---|
| k8s-master | 192.168.18.90 | |
| k8s-node01 | 192.168.18.91 | |
| k8s-node02 | 192.168.18.92 | |
| k8s-node03 | 192.168.18.93 |
端口
1 | [WARNING Firewalld]: firewalld is active, please ensure ports [6443 10250] are open or your cluster may not function correctly |
网卡配置
1 | vim /etc/NetworkManager/system-connections/ens33.nmconnection |
1 | [connection] |
1 | # connection 简写为 c |
1 | systemctl restart NetworkManager |
设置国内源
1 | sed -e 's|^mirrorlist=|#mirrorlist=|g' \ |
安装依赖
1 | # dnf install -y vim wget curl ntpdate ntp net-tools git \ |
Step 1: 准备 Hostname, SELinux and Firewall
1 | # hostnamectl set-hostname k8s-master |
禁用SELinux
使用 sestatus -v 查看 状态 或者 getenforce
1 | selinux的三种运行模式: |
1 | [root@localhost ~]# sestatus -v |
因为 sed -i /etc/sysconfig/selinux (selinux文件是/etc/selinux/config的软链接) 配置文件重启SELINUX没有关闭,才发现原来sed -i是不能直接修改软链接文件的,如下我修改之后的后果,发现链接文件不再是链接文件了。
1 | # setenforce 0 |
关闭 交换分区
1 | # 临时关闭 |
关闭交换分区前
1 | [root@localhost ~]# free -m |
关闭交换分区后
1 | [root@localhost ~]# free -m |
1 | ## 启用交换分区 |
/etc/fstab, 如果永久关闭注释掉 swap 分区那行即可
1 | [root@localhost ~]# cat /etc/fstab |
设置防火墙规则及转发
1 | systemctl status firewalld |
调整内核参数
1 | # modprobe br_netfilter |
1 | # cat > /etc/sysctl.d/k8s.conf <<EOF |
执行命令生效
1 | # sysctl -p /etc/sysctl.d/k8s.conf |
kube-proxy 开启 ipvs 的前置条件
linux kernel 4.19版本已经将nf_conntrack_ipv4 更新为 nf_conntrack
1 | # modprobe br_netfilter |
1 | ## 安装ipvs相关软件包 |
安装docker
1 | # dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo |
docker配置文件docker-daemon.json详解
Step 3: 设置 Kubernetes 国内源
1 | # cat <<EOF > /etc/yum.repos.d/kubernetes.repo |
Step 6: Install Kubeadm
1 | # dnf makecache |
下载k8s依赖镜像
通过阿里云镜像下载k8s依赖组件
1 |
|
1 | ## 下载镜像 |
下载时,还没有 coredns:v1.10.1,单独处理 coredns
1 |
|
1 | ## 指定安装版本 |
1 | mkdir -p $HOME/.kube |
kubeadm-config.yaml
1 | apiVersion: kubeadm.k8s.io/v1beta3 |
1 | kubeadm init --config kubeadm-config.yaml --upload-certs | tee kubeadm-init.log |
1 | # kubeadm reset |
error execution phase upload-config/kubelet: Error writing Crisocket information for the control-plane node: timed out waiting for the condition
1 | 拉取镜像失败 |
open /run/flannel/subnet.env: no such file or directory
1 | 需要指定网络,或者指定的方式不对 |
重置 node 节点
1 | 删除节点 |
1 |
1 | ## kubeadm 安装的 k8s 集群 delete node 后重新添加回集群问题解决 |
部署网络
1 |
|
启动失败
1 | # journalctl -xefu kubelet |
https://www.python2.net/questions-1171657.htm
连接 Harbor
1 | kubectl create secret docker-registry docker-harbor \ |
1 | kubectl get secret docker-harbor --output="jsonpath={.data.\.dockerconfigjson}" | base64 -d |
创建时指定命名空间
1 | kubectl --namespace kube-system \ |
常用命令:
1 | kubectl api-versions |
pod
1 | kubectl exec -it demo-deployment-6687bf488-5xnz6 -- /bin/sh |
svc
1 | <服务名称>.<工作负载所在命名空间>.svc.cluster.local:<端口号> |
headless
1 | 域名格式:$(podname).(headless server name).namespace.svc.cluster.local |
部署kubernetes-dashboard
https://github.com/kubernetes/dashboard
1 | # https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml |
创建管理员
dashboard-adminuser.yaml
1 | # cat > dashboard-adminuser.yaml << EOF |
说明:创建了一个叫admin-user的服务账号,并放在kubernetes-dashboard 命名空间下,并将cluster-admin角色绑定到admin-user账户,这样admin-user账户就有了管理员的权限。默认情况下,kubeadm创建集群时已经创建了cluster-admin角色,我们直接绑定即可。
创建登录用户
1 | # kubectl apply -f dashboard-adminuser.yaml |
查看admin-user账户的token
1 | # kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}') |
token
1 | kubeadm token create |
ingress
1 | # 查询需要解析的到的IP地址 |
https://kubernetes.github.io/ingress-nginx/
https://github.com/kubernetes/ingress-nginx
https://blog.csdn.net/qq_41076892/article/details/133897130
1 |
|
1 | imagePullSecrets: |
1 |
|
1 | 替换掉里面的两个镜像地址 |
常用命令
1 | ## 获取namespace信息 |
1 | pod-network-cidr是pod网络 |
1 | docker registry 私服密码 |
kuboard
1 | https://github.com/eip-work/kuboard-press/issues/328#issuecomment-1269980083 |
harbor
kubernetes1.20.x 默认容器采用的是containerd,不是docker,因此配置有所不同。
admin:admin
无配置时报错如下
1 | http: server gave HTTP response to HTTPS client |
在每个node上修改containerd的配置文件
1 | vim /etc/containerd/config.toml |
http访问方式写入
1 | [plugins."io.containerd.grpc.v1.cri".registry] |
https访问方式写入
1 | [plugins."io.containerd.grpc.v1.cri".registry] |
重启containerd
1 | systemctl restart containerd |
测试
1 | # http |
创建secret
1 | # http |
最后:在创建deployment时选择secret:regcred
参考文献
https://blog.csdn.net/qq_40460909/article/details/90521561
https://www.freesion.com/article/6878979989/
kubernetes启动Pod遇到CrashLoopBackOff的解决思路
https://www.huweihuang.com/kubernetes-notes/setup/installer/install-k8s-by-kubeadm.html