1.1 安装前说明
官方文档:https://kubernetes.io/docs/setup/production-environment/
安装步骤:
- 安装Runtime
- 安装kubeadm和kubelet
- master节点初始化
- node节点配置
- CNI网络插件
- Metrics Server
- Dashboard
说明:
于2022年12月4日,目前CKA考试使用的是ubuntu20版本的系统,v1.25版本的k8s
我的环境:
节点 | IP地址 |
---|---|
k8s-master | 192.168.2.100 |
k8s-node01 | 192.168.2.101 |
k8s-node02 | 192.168.2.102 |
1.2 安装Runtime
官方文档:https://kubernetes.io/docs/setup/production-environment/container-runtimes/
选择v1.25版本
官方提供了四种安装方式
docker在v1.24版本就已经不被支持了,我们这里选择安装containerd
无论选择哪种Runtimes都无所谓,考试不会考Runtime
考试的时候k8s官网是能访问的,我们可以在上面搜配置
xshell→工具→发送键到所有会话,让这三台虚拟机都执行同样的命令
#修改hosts文件
vim /etc/hosts
192.168.2.100 k8s-master01
192.168.2.101 k8s-node01
192.168.2.102 k8s-node02
#切换到root账号
sudo su -
#先卸载已经安装的docker
apt-get remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine docker-ce containerd -y
#如果服务器没有默认的docker源,首先配置源
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
#安装Containerd
apt-get install containerd -y
#配置Containerd的内核
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sudo sysctl --system
#创建Containerd的配置文件
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml
sed -i 's#k8s.gcr.io/pause#registry.cn-hangzhou.aliyuncs.com/google_containers/pause#g' /etc/containerd/config.toml
# 启动Containerd
systemctl daemon-reload
systemctl restart containerd
systemctl enable containerd
ctr plugin ls
1.3 安装kubeadm
官方文档:https://kubernetes.io/docs/setup/production-environment/tools/
安装kubeadm
#设置内核参数
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
#配置国内源
# 添加apt-key
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
# 添加源
echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" >/etc/apt/sources.list.d/kubernetes.list
#目前CKA考试版本为v1.25.1
sudo apt-get update
sudo apt-get install -y kubelet=1.25.1-00 kubeadm=1.25.1-00 kubectl=1.25.1-00
sudo apt-mark hold kubelet kubeadm kubectl
#配置镜像源并拉取镜像
swapoff -a
vim /etc/fstab #注释自动挂载swapoff
kubeadm config images pull \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version 1.25.1
#不配置镜像源默认使用官方源,国内无法拉取
root@k8s-master01:~# kubeadm init --help | grep image
--image-repository string Choose a container registry to pull control plane images from (default "registry.k8s.io")
kubectl version
考试的时候无需修改源,因为服务器在国外,是可以访问到官方镜像的
kubectl只需要在一台节点上安装即可。
kubectl可以不安装在master或node节点上,只需要安装在跟集群可以通信的任意节点都行。
1.4 初始化集群
注意这里改为你自己的集群master地址
#在master上操作
kubeadm init --apiserver-advertise-address 192.168.2.100 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --cri-socket "unix:///var/run/containerd/containerd.sock" --kubernetes-version 1.25.1
#得到node节点加入集群的命令,如下命令在node节点上执行,注意此token有效期为24h
kubeadm join 192.168.2.100:6443 --token krt1vv.bnk3klkq8y7lwhc6 \
--discovery-token-ca-cert-hash sha256:7498a2009c7933527cf3630f5a0a19860bec7ae1de4313fa9f824d008e54253d
#添加环境变量,kubeadm连接集群使用的是admin.conf文件
export KUBECONFIG=/etc/kubernetes/admin.conf
#或者执行如下命令效果一样,将admin.conf放入.kube/目录下,k8s会默认从这找
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#另开会话窗口查看日志
tail -f /var/log/syslog
如果初始化失败
kubeadm reset -f #之后按提示删除某些文件夹还有配置文件
Token过期处理
#查看当前token list
kubeadm token list
TOKEN TTL EXPIRES USAGES DESCRIPTION EXTRA GROUPS
krt1vv.bnk3klkq8y7lwhc6 23h 2022-12-06T05:56:54Z authentication,signing The default bootstrap token generated by 'kubeadm init'. system:bootstrappers:kubeadm:default-node-token
#重新生成node节点加入集群的命令
kubeadm token create --print-join-command
#在node节点测试是否跟master节点通信正常,如下表示正常通信
root@k8s-node01:~# curl https://192.168.2.100:6443 -k
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {},
"status": "Failure",
"message": "forbidden: User \"system:anonymous\" cannot get path \"/\"",
"reason": "Forbidden",
"details": {},
"code": 403
}
官方的方法,不建议使用
#创建新的token
$ kubeadm token create
wn3apj.yq8iz8fesbpf5wc6
#使用openssl创建密钥,再拼接,有一点复杂,不推荐使用。
参考:官方文档
1.5 安装网络组件calico
git clone https://github.com/dotbalo/k8s-ha-install.git
cd k8s-ha-install
git branch -a
git checkout manual-installation-v1.19.x
cd /root/k8s-ha-install/calico
ls
cp calico.yaml calico.yaml.bak
cat calico.yaml| grep image #可以看到镜像地址是国内的
#查看pod网段
cat /etc/kubernetes/manifests/kube-apiserver.yaml
--service-cluster-ip-range=10.96.0.0/12
host: 192.168.2.100
可以看到宿主机,svc网段
kubectl get cm -n kube-system kubeadm-config -oyaml
发现没有指定Pod地址,我们可以直接进行创建
vim calico.yaml
#搜索CALICO_IPV4POOL_CIDR修改ip地址
- name: CALICO_IPV4POOL_CIDR
value: "172.16.0.0/16"
kubectl create -f calico.yaml
#如果更新了yaml文件则
kubectl replace -f calico.yaml
kubectl get pod -n kube-system
#查看报错日志
kubectl logs -f calico-node-xxxx -n kube-system
1.6 安装MetricsServer
cd /root/k8s-ha-install/kubeadm-metrics-server
cp comp.yaml comp.yaml.bak
kubectl create -f comp.yaml
报一个 CrashLoopBackOff的错误,
看日志
kubectl logs -f metrics-server-74db45c9df-4s9lv -n kube-system
panic: unable to create request header authentication config: open /etc/kubernetes/pki/front-proxy-ca.crt: no such file or directory
#提示找不到 /etc/kubernetes/pki/front-proxy-ca.crt文件
#将master上的这个文件拷贝到其他节点上,需要注意ubuntu的root用户不能直接登录,需要指定用户
scp /etc/kubernetes/pki/front-proxy-ca.crt tz@k8s-node01:/tmp
scp /etc/kubernetes/pki/front-proxy-ca.crt tz@k8s-node02:/tmp
#在node01上操作
cp /tmp/front-proxy-ca.crt /etc/kubernetes/pki/front-proxy-ca.crt
#在node02上操作
cp /tmp/front-proxy-ca.crt /etc/kubernetes/pki/front-proxy-ca.crt
cd /root/k8s-ha-install/kubeadm-metrics-server
kubectl delete -f comp.yaml
kubectl create -f comp.yaml
kubectl get pod -A #就可以了
考试的时候calico跟metrics都已经装好了
1.7 安装dashboard
dashboard是k8s的图形化管理工具,需要安装两个yaml文件,分别是
- dashboard-user.yaml(管理员用户)
- dashboard.yaml
cd /root/k8s-ha-install/dashboard
cp dashboard-user.yaml dashboard-user.yaml.bak
cp dashboard.yaml dashboard.yaml.bak
kubectl create -f dashboard.yaml -f dashboard-user.yaml
查看
kubectl get ns #namespace的缩写
NAME STATUS AGE
default Active 155m
kube-node-lease Active 155m
kube-public Active 155m
kube-system Active 155m
kubernetes-dashboard Active 48s #在这呢
kubectl get pod -n kubernetes-dashboard #可以看到这个命名空间下有两个pod
kubectl get svc -n kubernetes-dashboard #可以看到端口号
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.102.107.170 <none> 8000/TCP 3m14s
kubernetes-dashboard NodePort 10.102.99.166 <none> 443:30306/TCP 3m14s
#查看node的ip地址
kubectl get nod -owide
#使用node节点的ip地址加上30306端口就能访问到kubernetes-dashboard
如果使用谷歌浏览器打开之前需要做如下配置,MAC上使用火狐浏览器不需要改参数
右击谷歌浏览器→右击google Chrome→点击属性
在目标这一栏,加上 --test-type --ignore-certificate-errors
,注意有空格
v1.24版本之前使用token方法
kubectl get secret -n kube-system | grep admin-user
admin-user-token-qlmbr kubernetes.io/service-account-token 3 44s
#describe查看某类资源的详细信息
kubectl describe secret admin-user-token-qlmbr -n kube-system
#得到token值,复制到浏览器中即可
v1.24版本之后查看token方法
参考:https://www.cnblogs.com/tz90/p/16949826.html
使用dashboard
执行命令
查看DaemonSet
在每个节点都会启动
点开calico-node的edit
如果hostNetwork为true会使用宿主机的IP地址
这就是为什么有些pod是使用的pod的地址,有些使用的是宿主机的地址