安装CKA考试环境(二)

1.1 安装前说明

官方文档:https://kubernetes.io/docs/setup/production-environment/

安装步骤:

  1. 安装Runtime
  2. 安装kubeadm和kubelet
  3. master节点初始化
  4. node节点配置
  5. CNI网络插件
  6. Metrics Server
  7. 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版本

image-20221204143236367

官方提供了四种安装方式

image-20221204143310233

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

如果拉不了镜像需要配置镜像加速

$ vim /etc/containerd/config.toml
#vim下搜索/mirrors,添加镜像加速,使用docker镜像源即可,上下级配置,缩进两个空格。
   [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
          endpoint = ["https://dxc7f1d6.mirror.aliyuncs.com"]
          
$ systemctl restart containerd
$ crictl pull nginx
Image is up to date for sha256:605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85

1.3 安装kubeadm

官方文档:https://kubernetes.io/docs/setup/production-environment/tools/

image-20221204154253108

image-20221204154428199

安装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创建密钥,再拼接语句,有一点复杂,不推荐使用,但会在二进制部署k8s的时候会讲到
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
   openssl dgst -sha256 -hex | sed 's/^.* //'

参考:官方文档

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.25.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的错误,

image-20221205155646241

看日志

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→点击属性

image-20221205163719335

在目标这一栏,加上 --test-type --ignore-certificate-errors,注意有空格

image-20221205163828072

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

image-20221205170923260

点击三个点,可以执行命令

image-20221205170944016

查看DaemonSet

DaemonSet表示在每个节点都会启动该Pod

image-20221205171042820

点开calico-node的edit

image-20221205171240178

如果hostNetwork为true会使用宿主机的IP地址

image-20221205171346178

这就是为什么有些pod是使用的pod的地址,有些使用的是宿主机的地址

image-20221205171520093

1.8 参考资料

posted @ 2022-12-05 17:56  努力吧阿团  阅读(1682)  评论(0编辑  收藏  举报