K8s学习总结

集群环境搭建

初始环境配置

关闭防火墙,虚拟内存

(1)更新安装包
sudo apt update
(2)配置内存
临时关闭虚拟内存
sudo swapoff -a
永久关闭虚拟内存
sudo vim /etc/fstab
注释掉下面一行即可
#/swapfile       none        swap    sw         0       0

时间同步

使用 chronyd 服务实现时间同步

systemctl start chronyd
stystemctl enable chronyd
date
sudo apt update && sudo apt upgrade && sudo apt autoremove
sudo timedatectl set-ntp true
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
sudo hwclock --systohc
date -R

安装 docker

配置安装环境
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
添加安装密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
设置安装稳定版
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
查看 docker 稳定版列表
apt-cache madison docker-ce
安装 docker,可以不指定版本号,默认安装最新版本
本次安装版本为 18.09
sudo apt-get install docker-ce=5:20.10.21~3-0~ubuntu-bionic
设置开机启动
sudo systemctl enable docker

添加配置信息

进入/etc/docker 目录
cd /etc/docker
添加 daemon.js 文件
sudo touch daemon.js
编辑 daemon.js
sudo vim daemon.js
添加内容如下
{
	"exec-opts":["native.cgroupdriver=systemd"]
}
加载 docker 配置
systemctl daemon-reload
重启 docker
sudo systemctl restart docker
重置 docker.sock 权限
sudo chmod 666 /var/run/docker.sock

安装 docker

配置安装环境
sudo apt-get update && sudo apt-get install -y apt-transport-https
添加安装密钥
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
添加 k8s 镜像源
进入/etc/apt/sources.list.d 目录下
cd /etc/apt/sources.list.d
创建 kubernetes.list 文件
sudo touch kubernetes.list
编辑 kubernetes.list
sudo vim kubernetes.list
在 kubernetes.list 文件中添加地址如下
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
更新安装包
sudo apt-get update

改变 driver

为 docker 添加配置,,driver 采用 systemd

more /etc/docker/daemon.json

卸载 docker

sudo apt-get autoremove docker docker-ce docker-engine  docker.io  containerd runc
dpkg -l | grep docker
dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P # 删除无用的相关的配置文件
 sudo rm -rf /etc/systemd/system/docker.service.d
 sudo rm -rf /var/lib/docker

安装 k8s

安装 kubeadm

sudo apt-get install kubelet=1.18.6-00 kubeadm=1.18.6-00 kubectl=1.18.6-00
设置开机启动
sudo systemctl enable kubelet
查看 k8s 版本
kubectl version
查看 kubelet 状态
Active: active (running)是启动状态
systemctl status kubelet
停止 kubelet
systemctl stop kubelet
启动 kubelet
systemctl start kubelet

配置 kubelet

配置 kubelet 的 cgroup

k8s 初始化

查看需要的镜像

注意:此处列出的版本可能不是(1.18.6),下面下载镜像时,版本设置一致。
kubeadm config images list

在 master 节点下载镜像

创建文件脚本
vi download.sh
脚本内容是上一步中的镜像名称
脚本内容:
images=(
    kube-apiserver:v1.18.6
    kube-controller-manager:v1.18.6
    kube-scheduler:v1.18.6
    kube-proxy:v1.18.6
    pause:3.2
    etcd:3.4.3-0
    coredns:1.6.7
)
for imageName in ${images[@]};do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName 
done

设置执行权限
chmod 777 download.sh
运行
./download.sh
# 注意,如果用虚拟机,内核数量必须要 2 个及以上。
# --image-repository				镜像加速,指定初始化下载的镜像。
# --apiserver-advertise-address		直接使用当前 master 主机地址
# --kubernetes-version				k8s 版本,可以不指定,缺省情况会用最新的
# --service-cidr					service 网络地址(建议使用 10.96.0.0/12,也可以不设置),不可与主机,pod 网络地址重复
# --pod-network-cidr 				pod 网络地址(建议使用 10.244.0.0/16),不可与主机,service 网络地址重复,与后面的 Calico 相关
# --v								日志等级,5 级以上会打印更详细的日志,--v=6 开启详细日志打印
 
sudo kubeadm init \
--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
--apiserver-advertise-address=192.168.49.150 \
--kubernetes-version=v1.18.6 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
如果失败可以 kubeadm reset
再次初始化

卸载 k8s

apt -y remove kubelet kubeadm kubectl
sudo kubeadm reset -f
sudo rm -rvf $HOME/.kube
sudo rm -rvf ~/.kube/
sudo rm -rvf /etc/kubernetes/
sudo rm -rvf /etc/systemd/system/kubelet.service.d
sudo rm -rvf /etc/systemd/system/kubelet.service
sudo rm -rvf /usr/bin/kube*
sudo rm -rvf /etc/cni
sudo rm -rvf /opt/cni
sudo rm -rvf /var/lib/etcd
sudo rm -rvf /var/etcd
删除节点
删除节点后,需要在相应的子节点
sudo kubectl delete nodes node1
重置主机点,慎重操作!!
手动删除配置文件
sudo rm -rf  /etc/kubernetes/pki/ca.crt
sudo rm -rf  /etc/kubernetes/kubelet.conf
sudo rm -rf  $HOME/.kube
重置子节点
sudo kubeadm reset
重新加载配置文件
systemctl daemon-reload
重置子节点,使用以下命令即可
sudo kubeadm reset
下载 flannel 配置文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
安装 flannel
kubectl apply -f kube-flannel.yml
注意:创建 Pod 时,如果出现 Pod 之间无法 ping 通,可以在子节点执行以下命令
iptables 是 Linux 平台下包过滤防火墙
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -F
sudo iptables -L -n

k8s版本升级

例v1.18.6->v1.19.6
确定要升级的版本:
apt update
apt-cache madison kubeadm

升级master节点

先升级一个控制节点
apt-mark unhold kubeadm && \
apt-get update &&apt-get install -y kubeadm=1.19.6-00 && \
apt-mark hold kubeadm
验证升级计划
kubeadm upgrade plan 
报错无controlplan
则:
kubeadm upgrade plan --ignore-preflight-errors=ControlPlaneNodesReady
开始升级:
sudo kubeadm upgrade apply v1.19.6 --ignore-preflight-errors=ControlPlaneNodesReady
顺利升级结束会看到:
[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.26.x". Enjoy!
[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.
升级其他控制节点:
sudo kubeadm upgrade node
升级kubectl kubelet
apt-mark unhold kubelet kubectl && \
apt-get update &&apt-get install -y kubelet=1.29.6-00 kubectl=1.19.6-00 &&\ 
apt-mark hold kubelet kubectl
重启kubelet:
sudo systemctl daemon-reload
sudo systemctl restart kubelet

升级工作节点

apt-mark unhold kubeadm && \
apt-get update && apt-get install -y kubeadm=1.19.6-00 && \
apt-mark hold kubeadm
对于工作节点,下面的命令会升级本地的 kubelet 配置:
sudo kubeadm upgrade node
腾空节点 :将节点标记为不可调度并驱逐所有负载,准备节点的维护:
# 将 <node-to-drain> 替换为你正在腾空的节点的名称
kubectl drain <node-to-drain> --ignore-daemonsets
升级kubelet kubectl:
apt-mark unhold kubelet kubectl && \
apt-get update && apt-get install -y kubelet=1.19.6-00 kubectl=1.19.6-00 && \
apt-mark hold kubelet kubectl
重启kubelet:
sudo systemctl daemon-reload
sudo systemctl restart kubelet
取消对节点的保护:通过将节点标记为可调度,让节点重新上线
# 将 <node-to-uncordon> 替换为当前节点的名称
kubectl uncordon <node-to-uncordon>

手动获取 token

kubeadm token list
重新生成完整的加入集群的命令:
kubeadm token create --print-join-command

设置节点名字

kubectl label nodes your_node_name kubernetes.io/role=<name>

k8s 应用

创建 dashboard

1.下载 Dashboard yaml 文件
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml
2.修改 Dashboard 的 service 资源支持 nodeport 暴露
vim dashboard.yaml 
#大概在 32 行附近
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort						#类型为 nodeport
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30017					#指定暴露的端口号
  selector:
    k8s-app: kubernetes-dashboard
    
3.创建资源
[root@k8s-master ~/k8s_1.19_yaml]# kubectl create -f dashboard.yaml 

4.查看资源的状态
[root@k8s-master ~/k8s_1.19_yaml]# kubectl get all -n kubernetes-dashboard 
 1.创建访问账号
 kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard 
 
 2.将账号与 cluster-admin 集群角色进行绑定授予权限
 kubectl create clusterrolebinding dashboard-admin-rb --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin
 
 3.获取账号的 token
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
或者:
get secret  && describe secret
修改 dashboard 登录过期时间
1.修改 yaml
[root@k8s-master ~]# vim k8s_1.19_yaml/dashboard.yaml 
    spec:
      containers:
        - name: kubernetes-dashboard
          image: kubernetesui/dashboard:v2.0.0
          imagePullPolicy: Always
          ports:
            - containerPort: 8443
              protocol: TCP
          args:
            - --auto-generate-certificates
            - --token-ttl=86400					#过期时间为 1 天,大概在 199 行附近

2.更新资源

阿里镜像加速器地址:https://3g4p6hi0.mirror.aliyuncs.com

crd

准备

k8s集群
kubebuilder
code-generator
go

初始化

mkdir loginDemo&& cd loginDemo
go mod init mydomain/loginDemo
kubebuilder init --domain demo.com
kubebuilder create api --group admin --version v1 --kind Auth
Create Resource [y/n]
y
Create Controller [y/n]
n

安装 helm 并使用 chart

安装 helm

二进制安装

下载 需要的版本
解压(tar -zxvf helm-v3.0.0-linux-amd64.tar.gz)
在解压目中找到 helm 程序,移动到需要的目录中(mv linux-amd64/helm /usr/local/bin/helm)
然后就可以执行客户端程序并 添加稳定仓库: helm help

使用脚本安装

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
如果想直接执行安装,运行
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

添加 chart 仓库

添加 bitnami 仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
添加开源社/Azure 中国
helm repo add azure http://mirror.azure.cn/kubernetes/charts/
查看添加的仓库
helm repo list 

安装 MySQL

查询 Artifact Hub 中可用的 mysql chart
helm search hub mysql
查询 repo 仓库可用的 mysql chart
helm search repo mysql 

RBAC

通过用户账号的方式分配权限

1 创建用户账号

1.创建证书文件
[root@k8s-master ~]# cd /etc/kubernetes/pki/
[root@k8s-master /etc/kubernetes/pki]# (umask 077;openssl genrsa -out knowman.key 2048)
Generating RSA private key, 2048 bit long modulus
....................................................................................+++
................+++
e is 65537 (0x10001)

2.使用 apiserver 的证书签发证书请求

2-1.申请签名,证书请求,申请的用户名是 knowman,组是 knowgroup
[root@k8s-master /etc/kubernetes/pki]# openssl req -new -key knowman.key -out knowman.csr -subj "/CN=knowman/O=knowgroup"
[root@k8s-master /etc/kubernetes/pki]# ll knowman.*
-rw-r--r-- 1 root root  915 4 月  20 13:27 knowman.csr
-rw------- 1 root root 1679 4 月  20 13:25 knowman.key

2-2.签发证书(使用 apiserver 的 ca 证书签发用户证书)
[root@k8s-master /etc/kubernetes/pki]# openssl x509 -req -in knowman.csr -CA ca.crt  -CAkey ca.key  -CAcreateserial -out knowman.crt -days 3650
Signature ok
subject=/CN=knowman/O=knowgroup
Getting CA Private Key

3.配置集群、用户、上下文信息
#配置集群
[root@k8s-master /etc/kubernetes/pki]# kubectl config set-cluster kubernetes --embed-certs=true --certificate-authority=/etc/kubernetes/pki/ca.crt --server=https://192.168.81.210:6443
Cluster "kubernetes" set.

#配置用户信息
[root@k8s-master /etc/kubernetes/pki]# kubectl config set-credentials knowman --embed-certs=true --client-certificate=/etc/kubernetes/pki/knowman.crt --client-key=/etc/kubernetes/pki/knowman.key 
User "knowman" set.

#配置上下文信息
[root@k8s-master /etc/kubernetes/pki]# kubectl config set-context knowman@kubernetes --cluster=kubernetes --user=knowman
Context "knowman@kubernetes" created.

4.查看配置的集群信息
[root@k8s-master /etc/kubernetes/pki]# kubectl config view

5)切换到 knowman 用户
[root@k8s-master /etc/kubernetes/pki]# kubectl config use-context knowman@kubernetes
Switched to context "knowman@kubernetes".

6)试着查看下 know-system 命名空间下的资源
[root@k8s-master /etc/kubernetes/pki]# kubectl get pod -n know-system
Error from server (Forbidden): pods is forbidden: User "knowman" cannot list resource "pods" in API group "" in the namespace "know-system"
#可以看到没有权限访问

7)切换到 admin 用户进行授权
[root@k8s-master ~]# kubectl config use-context kubernetes-admin@kubernetes 
Switched to context "kubernetes-admin@kubernetes"

2 创建 ClusterRole 资源设置权限

1.编写 ClusterRole 资源
[root@k8s-master ~/k8s_1.19_yaml/rbac]# vim knowman-clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: knowman-clusterrole
rules:											#定义角色
- apiGroups: ["","apps"]						#对哪个 api 组进行授权,""核心资源组,apps 组是 deployment 控制器所在的 api 组
  resources: ["pods","deployments"]				  #对什么资源进行授权
  verbs:										#具体的权限列表
  - get
  - list
  - watch

2.创建资源
[root@k8s-master ~/k8s_1.19_yaml/rbac]# kubectl create -f knowman-clusterrole.yaml
clusterrole.rbac.authorization.k8s.io/knowman-clusterrole created

3.查看资源
[root@k8s-master ~/k8s_1.19_yaml/rbac]# kubectl get clusterrole knowman-clusterrole
NAME                  CREATED AT
knowman-clusterrole   2021-04-20T06:26:20Z

4.查看资源的详细信息
[root@k8s-master ~/k8s_1.19_yaml/rbac]# kubectl describe clusterrole knowman-clusterrole

3 创建 RoleBinding 资源将用户和角色绑定

1.编写 yaml
[root@k8s-master ~/k8s_1.19_yaml/rbac]# vim knowman-rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
  name: knowman-rolebinding
  namespace: know-system
subjects:												#关联用户信息
- kind: User											#类型为用户
  name: knowman											#用户名称
  namespace: know-system								#角色所能控制的命名空间
  apiGroup: rbac.authorization.k8s.io
roleRef:											#关联角色信息
  kind: ClusterRole									 #类型为 ClusterRole
  name: knowman-clusterrole							  #角色名称
  apiGroup: rbac.authorization.k8s.io

2.创建资源
[root@k8s-master ~/k8s_1.19_yaml/rbac]# kubectl create -f knowman-rolebinding.yaml
rolebinding.rbac.authorization.k8s.io/knowman-rolebinding created

3.查看资源
[root@k8s-master ~/k8s_1.19_yaml/rbac]# kubectl get rolebinding knowman-rolebinding -n know-system
NAME                  ROLE                              AGE
knowman-rolebinding   ClusterRole/knowman-clusterrole   17s

4.查看资源的详细信息
[root@k8s-master ~/k8s_1.19_yaml/rbac]# kubectl describe rolebinding knowman-rolebinding -n know-system

4 切换到用户查看权限

1.切换用户
[root@k8s-master ~/k8s_1.19_yaml/rbac]# kubectl config use-context knowman@kubernetes 
Switched to context "knowman@kubernetes".

2.查看可以操作的 pod/deployment 资源
[root@k8s-master ~/k8s_1.19_yaml/rbac]# kubectl get pod,deployment -n know-system
NAME                                READY   STATUS    RESTARTS   AGE
pod/deploy-nginx-5cfd6fd7bd-79z4t   1/1     Running   1          6d3h
pod/deploy-nginx-5cfd6fd7bd-b67wf   1/1     Running   1          6d3h
pod/deploy-nginx-5cfd6fd7bd-qpl2w   1/1     Running   1          6d3h

NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/deploy-nginx   3/3     3            3           6d5h

3.删除 pod 查看是否有权限
[root@k8s-master ~/k8s_1.19_yaml/rbac]# kubectl delete pod deploy-nginx-5cfd6fd7bd-79z4t -n know-system
Error from server (Forbidden): pods "deploy-nginx-5cfd6fd7bd-79z4t" is forbidden: User "knowman" cannot delete resource "pods" in API group "" in the namespace "know-system"
#无权删除

Question

k8s

Q1:进程被占用:

处理方式:

找到该进程,然后 kill 它,然后可以删除锁并重新配置 dpkg:

 lsof /var/lib/dpkg/lock-frontend   
 sudo kill -3662 PID   
 sudo rm /var/lib/dpkg/lock-frontend
 sudo dpkg --configure -a

Q2: 删除ns 处于Terminating

kubectl get namespace dev -o json > tmp.json
修改导出文件,删除其中的finalizers这一项,其他保持不变
开启代理
kubectl proxy
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8001/api/v1/namespaces/dev/finalize

Q3: 节点notReady

master节点notReady

只有master节点notReady,日志无其他报错

  • 尝试重启,可行

    Q4: master not found

问题:
The connection to the server 192.168.49.150:6443 was refused - did you specify the right host or port?
解决:

master not found

Q5: 创建pod失败

  1. pod 处于CrashLoopBackOff 图片

describe 发现:

图片

原理:

Back-off restarting failed container的Warning事件,一般是由于通过指定的镜像启动容器后,容器内部没有常驻进程,导致容器启动成功后即退出,从而进行了持续的重启。

解决办法:

找到对应的deployment(ds)添加以下信息:

command: ["/bin/bash","-ce","tail -f /dev/null"]

Q6: kubelet 服务无法启动

kubelet无法启动报 code=exited,status=1/FAILURE 错误 多种原因及解决

1 证书过期导致 kubelet 无法正常起动。

参考

2 驱动问题,即 docker 的驱动与 kubelet 驱动不一致

Q7: k8s 无法删除状态为terminating的pod

ps:每当删除namespace或pod 等一些Kubernetes资源时,有时资源状态会卡在terminating, 很长时间无法删除,甚至有时增加–force flag(强制删除)之后还是无法正常删除。 这时就需要edit该资源,将字段finalizers设置为null,之后Kubernetes资源就正常删除了。
<1>强制删除
kubectl delete pod xxx -n xxx --force --grace-period=0
<2>如果强制删除不行,设置finalizers为空 ps:ps: 如果一个容器已经在运行,这时需要对一些容器属性进行修改,又不想删除容器,或不方便通过replace的方式进行更新。 kubernetes还提供了一种在容器运行时,直接对容器进行修改的方式,就是patch命令。 kubectl patch pod xxx -n xxx -p '{"metadata":{"finalizers":null}}'

root@rancher-master:~# docker info | grep Cgroup
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
WARNING: No swap limit support
root@rancher-master:~# cat /var/lib/kubelet/config.yaml | grep cgroup
cgroupDriver: systemd
修改 docker 驱动为 systemd
查看/etc/docker/daemon.json 文件

3 配置文件不存在

(1)先去查看下你的:  /etc/systemd/system/kubelet.service.d 下是否有 10-kubeadm.conf.如果没有需要创建这个文件,并复制如下内容。

[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. 
EnvironmentFile=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS

(2)如有有这个文件,则在文件中加入如代码
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true --fail-swap-on=false"
(3)重新启动 kubelet.service
       systemctl daemon-reload
       systemctl restart kubelet.service

如果配置高版本 kubeadm 需要卸载 可以执行

apt-get --purge remove kubeadm
kubelet kubectl 同理

docker

Q1:利用 docker 创建容器,容器被占用

root@master:/# docker run -d  -p 443:443 -p 30010:80 -p 222:22 --name gitlab --restart always -v /docker/gitlib/config:/etc/gitlab -v /docker
docker: Error response from daemon: Conflict. The container name "/gitlab" is already in use by container "309061f51869c5380d8b0ed0e311bc17cd
See 'docker run --help'.
1,先查看容器:
docker ps -a
看到了这个名为 gitlab/gitlab-ce 的容器
“docker ps” 是查看当前运行的容器,“docker ps -a” 是查看所有容器(包括停止的)。
移除这个容器
docker rm 309061f51869
然后再创建新容器
问题解决

Github 问题

ssh 连接

git remote add origin******
The authenticity of host 'github.com ' can't be established(无法建立主机“github.com”的真实性)
解决办法:
这是由于 git 地址采用了 ssh 方式,切换为 https 方式即可
也可能是仓库地址不对,可以用命令先查看一下:git remove -v
如果跟你的 github 地址不一样,那就去你的 github 上复制一下仓库地址
git remote set-url origin https://github.com/yourname/learngit.git (这个是你的复制的仓库地址)
最后再 push 下就可以了!
git push origin (branch)

密码登录失败,token 登录

问题:
remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/raye-s/test.git/'
大概意思就是你原先的密码凭证从 2021 年 8 月 13 日开始就不能用了,必须使用个人访问令牌(personal access token),就是把你的密码替换成 token!
解决
在个人设置页面,找到 Settings
选择开发者设置 Developer setting
选择个人访问令牌 Personal access tokens,然后选中生成令牌 Generate new token
设置 token 的有效期,访问权限等
要使用 token 从命令行访问仓库,请选择 repo。
要使用 token 从命令行删除仓库,请选择 delete_repo
其他根据需要进行勾选
我的 token:
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
也可以 把 token 直接添加远程仓库链接中,这样就可以避免同一个仓库每次提交代码都要输入 token 了:
git remote set-url origin https://<token>@github.com/<用户名>/<仓库名>.git
<token>:换成你自己得到的 token
<用户名>:是你自己 github 的用户名
<仓库名>:是你的仓库名称

github 无法访问或者访问过慢

修改 C:\Windows\System32\drivers\etc 下的 hosts 文件
查看github IP;
复制最新的 IP,添加到 hosts 文件中
下次不能访问了,修改为最新的 IP 就行。
如果还是不行,打开 cmd 输入:
ipconfig/flushdns

github 推送到仓库

origin 已经存在

git remote add origin**************
fatal: remote origin already exists.(报错远程起源已经存在。)
解决方法
1.先输入 git remote rm origin
2.再输入 git remote add origin**************

在命令行上创建新的仓库

echo "# 111" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M master
git remote add origin git@github.com:<用户名>/<仓库名>.git.
git push -u origin master

推送现有仓库

git remote add origin git@github.com:raye17/111.git
git branch -M master

git push -u origin master

因远程库与本地库不一致导致问题

问题原因:

远程库与本地库不一致造成的,在 hint 中也有提示,只要把远程库同步到本地库就行了。

	解决办法:

使用命令行:

git pull --rebase origin master

该命令的意思是把远程库中的更新合并到(pull=fetch+merge)本地库中, –-rebase的作用是取消掉本地库中刚刚的commit,并把他们接到更新后的版本库之中。

执行 pull 执行成功后,可以成功执行 git push origin master 操作。

fatal: Updating an unborn branch with changes added to the index.

提交到版本库中的文件没有没有提交到分支中,还在暂存区 所以执行

git commit

##

git clone 问题

问题:
fatal: unable to access 'https://github.com/libcheck/check.git/': GnuTLS recv error (-110): The TLS connection was non-properly terminated.
解决:
apt-get install gnutls-bin
git config --global http.sslVerify false
git config --global http.postBuffer 1048576000

openssl

问题:
Can't load /root/.rnd into RNG
140574087516608:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/root/.rnd
解决:
cd /root
openssl rand -writerand .rnd

虚拟机修改 ssh

192.168.53.10
vi /etc/resolv.conf
修改 dns
apt install ssh
cd /etc/ssh
vi sshd_conf
登录改为 yes
systemctl restart ssh

ubuntu 重启,修改resolv.conf

vi /etc/systemd/resolved.conf
将DNS注释取消,并添加8.8.8.8
     へ     /|
  /\7    ∠_/
  / │   / /
 │ Z _,< /   /`ヽ
 │     ヽ   /  〉
  Y     `  /  /
 イ● 、 ●  ⊂⊃〈  /
 ()  へ    | \〈
  >ー 、_  ィ  │ //
  / へ   / ノ<| \\
  ヽ_ノ  (_/  │//
  7       |/
  >―r ̄ ̄`ー―_ —


--pika